调用方法时处理null对象

cod*_*sed 5 c# c#-5.0 null-conditional-operator

我一直在寻找在调用方法(或方法链)时处理空对象的最佳选择.

我们的常见做法是检查条件:

if ( customObject != null ) {
    customObject.callMe();
}
Run Code Online (Sandbox Code Playgroud)

使用扩展方法可以进一步改进:

Program customObject = null;
if (customObject.NotNull()) {
    customObject.CallMe();
}

public static bool NotNull(this object o) {
    return o == null;
}
Run Code Online (Sandbox Code Playgroud)

请注意:我通常会忽略!从我的编程实践.因此,明智地说对我来说扩展方法很好.

但是,在处理涉及Method链的时候,它变得非常复杂.

customObject.CallMe().CallMe2() ex... 
Run Code Online (Sandbox Code Playgroud)

你怎么认为它可以在C#中处理,所以CallMe只有在customObject不为null时CallMe2调用它,并且仅在CallMe返回非null对象时才被调用.

当然我可以使用If条件或三元运算符.但是,我想知道vNext,C#5.0是否有一些东西可以提供.

Sco*_*lie 12

在即将到来的C#6(vNext)中有?.运算符(空条件运算符),它可以轻松地为每个嵌套属性链接空引用检查.

一个例子是:

int? first = customers?.[0].Orders?.Count();
Run Code Online (Sandbox Code Playgroud)

这是Visual Studio UserVoice站点中的请求功能

加?C#的运算符

您可以在Roslyn的Codeplex站点上查看C#6.0的所有新语言功能的状态:

C#6语言功能状态