我有如下代码,工作正常:
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?'的操作数
我可以通过将其合并为false来修复此错误,例如:
bool isHref = token.Children().Count() == 1
&& (firstChild?.Name.Equals("href", StringComparison.OrdinalIgnoreCase) ?? false);
但我好奇为什么编译器不喜欢第一个空值条件语法。
String.Equals(firstChild?.Name, "href", StringComparison.OrdinalIgnoreCase);
会发生什么? - Habib?.
可能返回null
或者值。在你的情况下,由于有一个返回bool
的方法,它只能返回Nullable<bool>
来容纳实际结果的true/false
或者在firstChild
为空时返回null
。因此,表达式的返回类型是Nullable<bool>
,而且由于不能同时应用&&
,所以会出现错误。 - Habib&
与bool
和bool?
一起使用。但结果将是一个bool?
。由于短路的原因,&&
不起作用。短路不起作用是因为如果bool?
是null
,则希望得到一个null
结果,但是如果第一部分是false
,则甚至不会评估第二部分。 - juharrfirstChild
为空。在这种情况下,整个表达式将为null(而不是一个直接的布尔值)。 - Millie Smith