我有以下代码,工作正常:
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);
但我很好奇为什么编译器不喜欢第一个空条件语法。
答案 0 :(得分:2)
第一个表达式返回null或bool
如果firstChild为null,则返回值为null,不能在if条件中使用
firstChild?.Name.Equals("href", StringComparison.OrdinalIgnoreCase)
与
相同firstChild == null ? null : firstChild.Name.Equals("href", StringComparison.OrdinalIgnoreCase)