C# 可以将值类型与 null 进行比较

标签 c# null

我今天遇到了这个问题,不知道为什么 C# 编译器没有抛出错误。

Int32 x = 1;
if (x == null)
{
    Console.WriteLine("What the?");
}

我对 x 怎么可能为空感到困惑。特别是因为这个赋值肯定会引发编译器错误:

Int32 x = null;

x 是否有可能变为 null,Microsoft 只是决定不将此检查放入编译器,还是完全遗漏了?

更新:在写这篇文章的代码乱七八糟之后,编译器突然发出警告,表示表达式永远不会为真。现在我真的迷路了。我将对象放入一个类中,现在警告消失了,但留下了一个问题,值类型最终是否可以为 null。

public class Test
{
    public DateTime ADate = DateTime.Now;

    public Test ()
    {
        Test test = new Test();
        if (test.ADate == null)
        {
            Console.WriteLine("What the?");
        }
    }
}

最佳答案

这是合法的,因为运算符重载决策有一个唯一的最佳运算符可供选择。有一个 == 运算符,它接受两个可为 null 的整数。本地整数可转换为可为空的整数。 null 文字可转换为可为 null 的 int。因此,这是 == 运算符的合法用法,并且始终会导致 false。

同样,我们也允许您说“if (x == 12.6)”,这也始终为假。本地整数可转换为 double ,字面量可转换为 double ,显然它们永远不会相等。

关于C# 可以将值类型与 null 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1972262/

相关文章:

c# - 高效地更新 .NET 字典中的绑定(bind)

c# - 如何在 C# 中调用具有动态属性的泛型方法

c# - 可空类型 : better way to check for null or zero in c#

c# - Azure 表存储 SaveChanges 返回 "The requested operation is not implemented on the specified resource."

c# - Linq:方法无法转换为存储表达式

c# - 检查文本框文本是否为空

java - 是否有一个标准的 Java List 实现不允许向其添加 null?

sql - 排除 WHERE 子句中的空白值和空值

api - 所有编程语言都有明确的 NIL、null 或 undefined 概念吗?

c# - 从 C# 导出 COM 组件时的命名问题(小写/大写)