2010-04-12 41 views
7

我需要在我的C#應用​​程序中使用此枚舉,但它不會讓我使用這些值。當我指定類型爲uint時,我可以使用-1值,並且當我指定int時,我不能使用最後2個值。有沒有辦法在這裏使用unchecked關鍵字來允許我定義所有這些值?這些值來自外部來源,所以我無法改變它們。如何在枚舉中使用不安全的值?

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

回答

9

如果你想-1是一個不同於0xFFFFFFFF的值,你將需要一個大於32位的數據類型。嘗試long

+0

使用64位數據類型不是一個選項,我使用互操作來返回一個32位值。 – 2010-04-12 16:11:57

+0

如果在使用uint時-1和0xFFFFFFFF在技術上是相同的,我想我可以刪除-1值? – 2010-04-12 16:13:15

+1

@Jon:當你使用uint時不存在-1 - 你必須做一個未經檢查的轉換。 – 2010-04-12 16:14:04

1

也許嘗試ulong枚舉而不是int?

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; 
} 
2

的一種方法是使用正常的數值爲enum(0,1,2,3),和創建一個類或一對的方法來將傳入值轉換爲enum成員,反之亦然。

+0

寫了這麼長的一篇文章,然後注意到你說了同樣的話。 +1。 @Jon Tackabury:@Jon Seigel的答案是最可維護的選擇。除非你非常熟悉你正在使用的庫,否則不要假設-1與0xFFFFFFFF相同。 – Randolpho 2010-04-12 16:30:26

3

0xFFFFFFFF的是一個32位的數字,所以它應該是適合枚舉:整數 (我覺得長的類型是矯枉過正:))

你試過

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