我遇到了一些继承uint
的枚举器。我无法弄清楚为什么有人会这样做。
示例:
Enum myEnum : uint
{
...
}
有人会这样做的任何优势或具体原因?为什么不将它保留为defaultint?
答案 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。