【发布时间】:2019-07-12 12:25:59
【问题描述】:
假设我在这里有以下代码:
static void Main(string[] args)
{
StringBuilder[] s = new StringBuilder[3];
if (s[0]?.Length > 0)
{
Console.WriteLine("hi");
}
}
我的理解是 if 语句中的表达式必须是布尔表达式。布尔表达式(我的理解可能是错误的)是一个计算结果为真或假的表达式。
在这种情况下,空条件运算符将返回空值,因为引用类型变量数组中元素的默认值为空值。因此,这个 if 语句等价于
bool? x = null;
if (x)
{
// do cool things here */
}
但这给了我一个语法错误:无法将 null 转换为 bool。
因此,上面的 StringBuilder 示例如何工作?我的理解是,上面代码的更好方法应该是将它与 null-coalescing 运算符结合起来,如下所示:
if (s[0]?.Length > 0 ?? false) {}
谢谢大家:)
【问题讨论】:
-
我希望你已经回答了你的问题。