假设我这里有以下代码:
static void Main(string[] args)
{
StringBuilder[] s = new StringBuilder[3];
if (s[0]?.Length > 0)
{
Console.WriteLine("hi");
}
}
Run Code Online (Sandbox Code Playgroud)
我的理解是 if 语句中的表达式必须是布尔表达式。布尔表达式(我的理解可能是错的)是计算结果为 true 或 false 的表达式。
在这种情况下,null 条件运算符将返回 null,因为引用类型变量数组中元素的默认值为 null。因此,这个 if 语句等价于
bool? x = null;
if (x)
{
// do cool things here */
}
Run Code Online (Sandbox Code Playgroud)
但这给了我一个语法错误:无法将 null 转换为 bool。
那么,上面的 StringBuilder 示例是如何工作的呢?我的理解是,上述代码的更好方法应该是将其与空合并运算符结合起来,如下所示:
if (s[0]?.Length > 0 ?? false) {}
Run Code Online (Sandbox Code Playgroud)
谢谢大家:)