如何在枚举中使用不安全的值?

时间:2010-04-12 15:57:50

标签: c# interop enums unsafe

我需要在我的C#应用​​程序中使用这个枚举,但它不会让我使用这些值。当我将类型指定为uint时,我可以使用-1值,当我指定int时,我不能使用最后2个值。有没有办法在这里使用unchecked关键字来允许我定义所有这些值?这些值来自外部源,因此我无法更改它们。

internal enum MyValues : int
{
    value1 = -1,
    value2 = 0,
    value3 = 0x80000000,
    value4 = 0xFFFFFFFF
}

5 个答案:

答案 0 :(得分:9)

如果您希望-10xFFFFFFFF的值不同,则需要大于32位的数据类型。试试long

答案 1 :(得分:3)

0xFFFFFFFF是32位数,因此它应该适合enum:int (我觉得长型是一种矫枉过正:) :)

你试过吗

enum YourEnum : int { /*...*/, value4 = unchecked( (int)0xFFFFFFFF ) };

答案 2 :(得分:2)

由于这些值看起来是常量,因此只需创建一个静态类来保存值。此外,您可以使用您想要的任何类型:

public static class MyValues
{
    public const int value1 = -1;
    public const int value2= 0;
    public const int value3 = 0x80000000;
    public const int value4 = 0xFFFFFFFF;
}

答案 3 :(得分:2)

解决此问题的一种方法是使用enum(0,1,2,3)的常规值,并创建一个或一对方法将传入值转换为{{1}成员,反之亦然。

答案 4 :(得分:1)

也许尝试ulong enums而不是int?