可空类型如何使用比较运算符处理空值?

Nei*_*eil 23 .net c#

Nullable<T>当比较的一边为空时,有没有人具体了解C#如何处理与类型的比较?

正如我通过试验编译器所理解的那样,似乎比较总是返回false,但我找不到任何文档来支持它.这是该语言的真正特征(因此我可以依赖它),或者这是一个在未来版本中可能会改变的实现细节?

换句话说,下面的方法是否真的意味着y.HasValue,并且你能指出一些证明它确实存在的文档吗?

    public bool foo(int x, int? y)
    {
        return x < y;
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 47

当比较的一边为空时,有没有人具体了解C#如何处理与Nullable类型的比较?

是 - C#语言规范,第7.3.7节.在这种情况下,它是一个关系运算符:

对于关系运算< > <= >=符,如果操作数类型都是非可空类型并且结果类型是,则存在提升形式的运算符bool.通过向?每个操作数类型添加单个修饰符来构造提升形式.false如果一个或两个操作数为空,则提升的运算符将生成该值.否则,提升的运算符会解包操作数并应用基础运算符来生成bool结果.

其他运营商也有类似的详细部分.

如果对该语言的某些方面如何工作(以及它是否有保证或特定于实现)存在疑问,那么C#语言规范应该是您的第一个调用端口.

  • 要下载规范以供阅读:http://www.microsoft.com/download/en/details.aspx?id = 7029 (3认同)

Bra*_*don 5

如果其中一个值为null,则比较将为false(除外!=)

当您使用可空类型进行比较时,如果其中一个可空类型的值为null而另一个不是,则除了!=(不等于)之外,所有比较都会计算为false.重要的是不要假设因为特定比较返回false,相反的情况返回true.在以下示例中,10不大于,小于或等于null.只有num1!= num2的计算结果为true.

MSDN来源