Czy mogę wymusić własne zwarcie w wywołaniu metody?
Załóżmy, że chcę sprawdzić kilka obiektów, aby upewnić się, że żaden nie jest pusty:
if (obj != null &&
obj.Parameters != null &&
obj.Parameters.UserSettings != null) {
// do something with obj.Parameters.UserSettings
}
Kuszącą perspektywą jest napisanie funkcji pomocniczej, aby zaakceptować zmienną liczbę argumentów i uprościć ten rodzaj kontroli:
static bool NoNulls(params object[] objects) {
for (int i = 0; i < objects.Length; i++)
if (objects[i] == null) return false;
return true;
}
Wtedy powyższym kodem może stać się:
if (NoNulls(obj, obj.Parameters, obj.Parameters.UserSettings)) {
// do something
}
Dobrze?Źle. Jeśliobj
ma wartość null, a ja otrzymamNullReferenceException
kiedy próbuję przejśćobj.Parameters
doNoNulls
.
Powyższe podejście jest więc wyraźnie błędne. Aleif
oświadczenie za pomocą&&
operator działa dobrze, ponieważ jest zwarty. Więc:czy istnieje sposób na zwarcie metody, tak aby jej argumenty nie były oceniane, dopóki nie zostaną jawnie przywołane w metodzie?