Enum.GetUnderlyingType(Type) 的作用是什么?

发布于 2024-10-09 23:56:22 字数 579 浏览 0 评论 0原文

我不明白 Enum.GetUnderlyingType(Type enumType) 的目的

MSDN 文档 也没有帮助:

返回指定枚举的基础类型。

看起来这会将指定类型的 enum 转换为...其他东西。 o_O

什么是底层类型?这看起来像是实现的一些内部细节。为什么这是公开的?我为什么要关心实施?浏览实际的实现也没有帮助,该方法只是进行一些检查然后调用

[MethodImplAttribute(MethodImplOptions.InternalCall)] 
private static extern Type InternalGetUnderlyingType(Type enumType);

...我找不到源代码。

有人能解释一下吗?

I don't understand the purpose of Enum.GetUnderlyingType(Type enumType)

The MSDN documentation doesn't help either:

Returns the underlying type of the specified enumeration.

It seems that this converts a specified type of enum into... something else. o_O

What IS an underlying type? This looks like some internal details of the implementation. Why is this public? Why would I care about the implementation? Browsing the actual implementation doesn't help either, the method just does some checks then calls

[MethodImplAttribute(MethodImplOptions.InternalCall)] 
private static extern Type InternalGetUnderlyingType(Type enumType);

... to which I can't find the source.

Can anybody shed some light on this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

听风念你 2024-10-16 23:56:22

请注意,您可以通过以下方式指定枚举的基础类型

enum Foo : long { One, Two };

,然后 GetUnderlyingType 将为 typeof(Foo) 返回 long

请注意,基础类型可以是除 char 类型之外的任何整型。

Note that you can specify the underlying type of an enum via

enum Foo : long { One, Two };

And then GetUnderlyingType is going to return long for typeof(Foo).

Note that the underlying type can be any integral type except for char types.

雄赳赳气昂昂 2024-10-16 23:56:22

枚举作为数字存储在内存中。默认情况下,int32。这就是底层类型。你可以改变这一点:

public enum z : byte {
  x = 257 // invalid
}

Enums are stored in memory as numbers. By default, int32. That's the underlyting type. You can change that:

public enum z : byte {
  x = 257 // invalid
}
甜扑 2024-10-16 23:56:22

根据 MSDN

<块引用>

每个枚举类型都有一个基础类型,它可以是任何整数
除 char 之外的类型。枚举元素的默认基础类型是 int。

例如,

enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

您的基础类型是 int

enum Range :long {Max = 2147483648L, Min = 255L};

而现在它是 long 。

Per MSDN:

Every enumeration type has an underlying type, which can be any integral
type except char. The default underlying type of the enumeration elements is int.

e.g.

enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

You're underlying type is an int

enum Range :long {Max = 2147483648L, Min = 255L};

And now it's long.

拒绝两难 2024-10-16 23:56:22

这是一篇文章的链接,其中提供了有关它的作用以及何时使用它的一些解释。
http://dotnetperls.com/enum-getunderlyingtype

Here is a link to an article that gives some explanations about what it does and when to use it.
http://dotnetperls.com/enum-getunderlyingtype

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文