Nullable<T>当比较的一边为空时,有没有人具体了解C#如何处理与类型的比较?
正如我通过试验编译器所理解的那样,似乎比较总是返回false,但我找不到任何文档来支持它.这是该语言的真正特征(因此我可以依赖它),或者这是一个在未来版本中可能会改变的实现细节?
换句话说,下面的方法是否真的意味着y.HasValue,并且你能指出一些证明它确实存在的文档吗?
public bool foo(int x, int? y)
{
return x < y;
}
Run Code Online (Sandbox Code Playgroud) 假设我这里有以下代码:
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)
谢谢大家:)