一連のオブジェクトをチェックして、どれも null でないことを確認したいとします。
if (obj != null &&
obj.Parameters != null &&
obj.Parameters.UserSettings != null) {
// do something with obj.Parameters.UserSettings
}
可変数の引数を受け入れ、この種のチェックを簡素化するヘルパー関数を作成することは魅力的な見通しです。
static bool NoNulls(params object[] objects) {
for (int i = 0; i < objects.Length; i++)
if (objects[i] == null) return false;
return true;
}
次に、上記のコードは次のようになります。
if (NoNulls(obj, obj.Parameters, obj.Parameters.UserSettings)) {
// do something
}
右?違う。obj
が null の場合、NullReferenceException
に渡そうとするとobj.Parameters
が取得されNoNulls
ます。
したがって、上記のアプローチは明らかに見当違いです。しかし、演算子if
を使用したステートメント&&
は短絡されているため、問題なく機能します。だから:メソッド内で明示的に参照されるまでその引数が評価されないように、メソッドを短絡させる方法はありますか?