将Enum指定为uint的原因是什么?

时间:2009-01-05 15:09:24

标签: c#

我遇到了一些继承uint的枚举器。我无法弄清楚为什么有人会这样做。

示例:

Enum myEnum : uint
{
   ...
}

有人会这样做的任何优势或具体原因?为什么不将它保留为defaultint?

8 个答案:

答案 0 :(得分:24)

如果枚举值大于2,147,483,647且非负值。

答案 1 :(得分:9)

我猜它已经完成了允许它自动转换为uint(在C中,枚举被类型系统视为int)。很可能允许对枚举的标志值进行按位OR运算。见http://www.velocityreviews.com/forums/t286596-enums-in-c-and-c.html

答案 2 :(得分:9)

我能想到的一个原因是范围检查更容易。鉴于大多数枚举从0开始,您只需要检查上限。

答案 3 :(得分:8)

在某些情况下使用.NET的COM Interop / P / Invoke时,这是方便且绝对必要的。例如,您肯定会以pinvoke.net的方式找到这样的定义。在某些情况下,它只是更接近底层API定义,但不是必需的,但在某些情况下,底层API可能会使用这些高位中的一些用于标志,并且它将需要为UINT。 在Interop之外,你可以在普通的C#/ VB.NET中使用一些非常高的位作为标志,这也可能需要uint。

答案 4 :(得分:4)

我正在将最初用C编写的一些消息代码转换为C#。

C代码中的某些字段具有一组有限的可能值,这些值被定义为#defines的关联组。换句话说,枚举。

转换其中一些枚举时,某些值对于整数来说太大了,例如

#define NONE 0x00000000

#define VAL1 0x00000001

...

#define VALX 0x80000000

这里,VALX不会被C#中的默认枚举所接受,因此必须将枚举转换为 uint ,它也是记录结构中存储变量的类型。

答案 5 :(得分:1)

我正在谈论的例子在这里的代码中: http://www.codeplex.com/FacebookNET

看一下FacebookResponseStatus.cs课程

我可以通过电子邮件发送作者,但我认为不要打扰,只是根据其他经历看一看人们在一般社区中的想法。

我不会在CodePlex上使用这个框架,但正在审查它以了解其他人如何将Facebook实施到.NET中。我只是觉得这很有意思,想知道为什么:那里的Enums uint。

答案 6 :(得分:1)

看起来他们只是为了这一个错误而这样做,这意味着可能在该类中没有实现更多的错误。

    /// <summary>
    /// There was an HTTP error in issuing the request.
    /// </summary>
    HttpError = 0xFFFF0000

答案 7 :(得分:1)

我知道另一个原因,'因为一位同事在这里做了。

为了避免解释here(第2项)的问题,在生成枚举列表时,他会根据字符串给它一个唯一的值(我不记得现在怎么样,它不能是哈希码'cos不是唯一的)。

唯一的问题是这些数字有点大,所以他把这个数字作为一个uint。