言われているように、あなたは??でこれを行うことはできません オペレーター(まあ、これをよりきれいにするというあなたの目的に合わないように見えるいくつかのゆがみがないわけではありません)。
このパターンが出現しているのを見ると、すぐに施行について考えます。もともとはC++の世界から、C#にかなりうまく移行しますが、ほとんどの場合、それほど重要ではありません。
アイデアはあなたが形の何かを取るということです:
if( condition )
{
throw Exception;
}
そしてそれを次のように変換します:
Enforce<Exception>( condition );
(例外タイプをデフォルトにすることで、さらに単純化できます)。
さらに進んで、さまざまな条件チェック用のNunitスタイルのメソッドのセットを作成できます。
Enforce<Exception>.NotNull( obj );
Enforce<Exception>.Equal( actual, expected );
Enforce<Exception>.NotEqual( actual, expected );
等
または、期待ランバを提供することでさらに良い:
Enforce<Exception>( actual, expectation );
本当に素晴らしいのは、それを実行したら、実際のパラメータを返し、インラインで適用できることです。
return Enforce( command.ExecuteScalar() as Int32?, (o) => o.HasValue ).Value;
...そしてこれはあなたが求めているものに最も近いようです。
私は以前にこれの実装をノックアップしました。引数を取る例外オブジェクトを一般的に作成する方法のように、いくつかの小さな問題があります-そこにいくつかの選択肢があります(私は当時リフレクションを選択しましたが、追加のパラメーターとしてファクトリを渡す方がさらに良いかもしれません)。しかし、一般的に、それはすべて非常に簡単で、多くのコードを本当にクリーンアップすることができます。
オープンソースの実装をノックアップするためにやるべきことのリストにあります。