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

本文关键字:不等于 枚举 默认值 | 更新日期: 2023-09-27 17:56:58

我有点惊讶地发现调用构造函数:

class MyClass<T>
{
    public MyClass()
    {
        if ( default( T ) == null )
            Debugger.Break();
    }
}

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

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

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

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


延伸阅读:如何将枚举设置为空
什么是默认(对象);用 C# 做?

您可能还想通读此搜索中的其他一些命中:[c#] 默认值枚举 null

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

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