默认 ( 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
}
}
}
我有点惊讶地发现在以下位置调用构造函数:
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
}
}
}