我有点惊讶地发现在以下地方调用构造函数:
class MyClass<T>
{
public MyClass()
{
if ( default( T ) == null )
Debugger.Break();
}
}
当T
是枚举类型时,不会中断。为什么?似乎即使对于枚举,default( T )
和null
也应相同。
答案 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
}
}
}