为什么null条件运算符对==和.Equals()的行为不同?

时间:2015-08-24 19:04:42

标签: c# c#-6.0 null-conditional-operator

我有以下代码,工作正常:

var firstChild = token.First as JProperty;
bool isHref = token.Children().Count() == 1
           && firstChild?.Name == "href";

我想让字符串比较不区分大小写,因此我将其更改为:

var firstChild = token.First as JProperty;

bool isHref = token.Children().Count() == 1
           && firstChild?.Name.Equals("href", StringComparison.OrdinalIgnoreCase);

现在编译器给了我一个错误:

  

运营商&&不能应用于' bool'类型的操作数和'布尔?'

我可以通过合并到错误来修复错误,如

bool isHref = token.Children().Count() == 1
         && (firstChild?.Name.Equals("href", StringComparison.OrdinalIgnoreCase) ?? false);

但我很好奇为什么编译器不喜欢第一个空条件语法。

1 个答案:

答案 0 :(得分:2)

第一个表达式返回null或bool

如果firstChild为null,则返回值为null,不能在if条件中使用

firstChild?.Name.Equals("href", StringComparison.OrdinalIgnoreCase)

相同
firstChild == null ? null : firstChild.Name.Equals("href", StringComparison.OrdinalIgnoreCase)