条件语句中的C#6.0 null运算符

Sch*_*Box 6 c# null c#-6.0

从我null在C#6.0中使用新运算符收集的内容中,您可以执行以下操作:

string name = people.FirstOrDefault()?.FullName;
Run Code Online (Sandbox Code Playgroud)

这很棒,但我经常遇到的一个验证是这样的:

object name = null;
if(name != null) {
    DoSomething();
} else {
    DoSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

鉴于新null运营商的目的,我希望这样的事情应该是可能的:

if(name?) {
    DoSomething();
} else {
    DoSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这里的问题是,当?检查的值实际上是null,它返回null,并且您需要语句的bool条件if.由于您无法直接将a转换null为a bool,是否有更简单的方法可以在不if(name != null)使用nullC#6.0中的new 运算符的情况下进行检查?

Lua*_*aan 13

这样做没有意义.你在你的例子中没有做任何空合并 - 你只是检查null.

如果你想检查name对象的某个成员,可以更好地使用.例如:

if (name?.FirstName != null) ...
Run Code Online (Sandbox Code Playgroud)

但正如你所看到的,它仍然是一个简单的null比较 - 我们只是使用null合并来避免写这样的东西:

if (name != null && name.FirstName != null) ...
Run Code Online (Sandbox Code Playgroud)

  • @juFo这很明显,如果你考虑一下 - 因为你正在使用合并算子,`bool`会变成`bool?`(`null`必须传播通过所有的空合并).而`if(default(bool?))`与允许`if(null)`完全一样 - 也就是说,不是很多.你*可以*做的是使用`(session?.Connected).GetValueOrDefault(false)` - 这比`a == true`要明确得多. (3认同)