当从一个空条件赋值时,返回一个可以为空的值类型是有意义的。否则,如果对象为 null,则 null 条件将返回值类型的默认值,而您不希望这样。因此,这很好:
bool? IsTerminated = Employee?.IsTerminated;
但是,如果我只是检查一个条件,为什么它会返回一个可为空的类型?你会认为编译器可以很好地解决这个问题:
if (Employee?.IsTerminated) { /*do something here*/ }
毕竟,它只是编译到这个,对吧?
if (Employee != null && Employee.IsTerminated) { /*do something here*/ }
为了让它工作,我必须这样做:
if ((Employee?.IsTerminated).GetValueOrDefault()) { /*do something here*/ }
在额外的代码和必须将表达式包装在括号中之间,空条件的简写语法的整个目的似乎被打败了。这是处理空条件返回值的正确方法,还是有另一种不涉及可空返回值的方法?