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

时间:2016-07-15 00:55:53

标签: c# generics enums null comparison

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

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

不会中断。为什么?似乎即使对于枚举,default( T )null也应相同。

2 个答案:

答案 0 :(得分:2)

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

null其中default(T)是任何值类型,包括枚举,将是该类型的0填充值。即实际价值。不是T


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

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

答案 1 :(得分:1)

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

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