gpt4 book ai didi

c# - 如何确定从 ushort 继承的枚举类型?

转载 作者:行者123 更新时间:2023-11-30 19:44:49 28 4
gpt4 key购买 nike

如果我像这样声明一个继承自 ushort 的枚举:

public enum MyEnum : ushort { A = 0, B = 1 };

然后像这样检查它的类型:

if(typeof(MyEnum) != typeof(ushort))
System.Diagnostics.Debugger.Break();

断点被调用。为什么会这样?

最佳答案

之所以这样叫,是因为它们不是同一种类型!一种是具有 ushort 类型基础值的枚举类型,另一种是 ushort 本身。 (请注意,它并不是真的“继承自 ushort”,即使它使用相同的语法 - 它实际上只是在说“底层类型是 ushort”。)

为什么您期望它们是同一类型?如果它们实际上是同一类型,您将失去很多枚举的类型安全性。

打印 typeof(MyEnum).Name 并得到 UInt16 IMO 会很奇怪。

如果您尝试确定基础类型,您应该使用 Type.GetEnumUnderlyingType :

if (typeof(MyEnum).GetEnumUnderlyingType() == typeof(ushort))
{
// Yup, the underlying type is ushort
}

编辑:只是为了完整起见,如果 MyEnum 真的 did 继承自 ushort,您仍然需要测试类型 equality 。正如 cdhowie 在评论中所说,如果你写道:

if (typeof(string) != typeof(object))
{
Debugger.Break();
}

那会仍然进入调试器。你可能想看看 Type.IsAssignableFrom适用于您确实想要进行此类比较的情况。

关于c# - 如何确定从 ushort 继承的枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729610/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com