默认 ( T ) 枚举值不等于 null

A default( T ) enum value doesn't equal null

我有点惊讶地发现在以下位置调用构造函数:

class MyClass<T>
{
    public MyClass()
    {
        if ( default( T ) == null )
            Debugger.Break();
    }
}
T 是枚举类型时,

不会中断。为什么?似乎即使对于枚举,default( T )null 也应该是等价的。

任何值类型都不会被测试为等于 null,除非它是 Nullable<T>,它具有特殊的编译器和语言支持,可以将未设置的值视为 null

其中 T 是任何值类型(包括枚举)的 default(T) 将是该类型的任何填充 0 的值。 IE。一个实际值。不是 null.


补充阅读: How to set enum to null
What does default(object); do in C#?

您可能还想阅读此搜索中的其他一些匹配项:[c#] default value enum null

因为.net中的枚举是值类型。如果你只想知道是否 default(T) == null 那么你可以检查它是否是引用类型。

class MyClass<T>
{
    public MyClass()
    {
        if (typeof (T).IsClass)
        {
            Debugger.Break();
        }
        else if (typeof (T).IsValueType)
        {
            //do something
        }
    }
}