如果我声明一个继承自ushort的枚举,如下所示:
public enum MyEnum : ushort { A = 0, B = 1 };
Run Code Online (Sandbox Code Playgroud)
然后检查它的类型如下:
if(typeof(MyEnum) != typeof(ushort))
System.Diagnostics.Debugger.Break();
Run Code Online (Sandbox Code Playgroud)
断点被调用.为什么会这样?
这是因为他们不是同一类型!一个是枚举类型,其基础值为type ushort,另一个是ushort其自身.(请注意,ushort即使它使用相同的语法,它也不是真正的"继承" - 它实际上只是说"底层类型是ushort".)
你为什么期望它们是同一类型?如果它们实际上是同一类型,那么你将失去很多类型的枚举安全性.
打印typeof(MyEnum).Name并获得UInt16IMO 会很奇怪.
如果您正在尝试确定基础类型,则应使用Type.GetEnumUnderlyingType:
if (typeof(MyEnum).GetEnumUnderlyingType() == typeof(ushort))
{
// Yup, the underlying type is ushort
}
Run Code Online (Sandbox Code Playgroud)
编辑:只是为了完整性,如果MyEnum真的没有继承ushort,你仍然可以测试类型的平等.正如cdhowie在评论中所说,如果你写道:
if (typeof(string) != typeof(object))
{
Debugger.Break();
}
Run Code Online (Sandbox Code Playgroud)
那仍然会进入调试器.您可能希望查看Type.IsAssignableFrom您真正想要进行此类比较的情况.
| 归档时间: |
|
| 查看次数: |
775 次 |
| 最近记录: |