有沒有辦法在c#中進行通用級聯空引用檢查?級聯空引用異常檢查?
什麼,我想實現的是,如果我試圖訪問一個字符串變量是C類,這是inturn在B類,這是A.
ABCstr
的一部分
而且我通過A,我將不得不檢查A是否爲空,然後檢查B是否爲空,然後檢查C是否爲空,然後訪問str。
是否有可能有一些方法 - 我們可以傳入,A和A.B.C.str並返回null如果所有東西都正確存在,那麼任何東西都是null或str的值。
有沒有辦法在c#中進行通用級聯空引用檢查?級聯空引用異常檢查?
什麼,我想實現的是,如果我試圖訪問一個字符串變量是C類,這是inturn在B類,這是A.
ABCstr
的一部分
而且我通過A,我將不得不檢查A是否爲空,然後檢查B是否爲空,然後檢查C是否爲空,然後訪問str。
是否有可能有一些方法 - 我們可以傳入,A和A.B.C.str並返回null如果所有東西都正確存在,那麼任何東西都是null或str的值。
有沒有內置在C#中的可能性,但你可以使用這樣的事情http://www.codeproject.com/Articles/109026/Chained-null-checks-and-the-Maybe-monad
它涉及聲明正是如此功能:
public static TResult With<TInput, TResult>(this TInput o,
Func<TInput, TResult> evaluator)
where TResult : class where TInput : class
{
if (o == null) return null;
return evaluator(o);
}
然後你可以這樣調用:
string postCode = this.With(x => person)
.With(x => x.Address)
.With(x => x.PostCode);
FTFY .......... http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere- really-good-answers –
有沒有內置的方式來做到這一點,但在C#6.0中,我們期待一個'安全導航'操作符,請參閱this post by Jerry Nixon
它會是這個樣子:
var g1 = parent?.child?.child?.child;
if (g1 != null) // TODO
我聞得墨忒耳定律違規。 –
我在這裏做了一些令人討厭的事情:http://stackoverflow.com/questions/17657942/nice-way-to-avoid-null-checks-in-ifs – rene
@rene:在很多方面都是如此錯誤。我想我喜歡它。 –