2010-05-12 42 views
1

我有一個枚舉,其映射到一堆INT.NET 3.5中有可能指定一個枚舉類型嗎?

例如

enum MyEnum { 
Open = 1, 
Closed = 2, 
Exit = 4 

} 

我卻覺得,當我想這個分配到一個整數,我得先投它。

int myEnumNumber = **(int)** MyEnum.Open; 

是否可以指定枚舉的類型,以便隱式地指定一個整數指定給枚舉中的任何值?這樣的話,我並不需要把它轉換成一整型,如果我想使用它

感謝

+0

這這裏也討論(重複?):http://stackoverflow.com/questions/261663/can-we-define-implicit-conversions-of-enums-in-c – Peter 2010-05-12 06:50:07

+0

我想你的意思是'枚舉'而不是'枚舉」。 – Ash 2010-05-12 06:57:33

回答

2
enum MyEnum : int 
{ 
    Open = 1, 
    Closed = 2, 
    Exit = 4 
} 

這也被提及here

但是,這不允許您避免強制轉換,這允許將它用於Int32以外的類型(這是默認的枚舉類型)。

總之,是的,你可以指定一個類型但不是,你仍然必須施放它。

+0

這是否消除了對演員的需求?這就是我認爲@RoboShop想要的。 – Ash 2010-05-12 06:49:32

+0

啊,不,我會澄清 – McAden 2010-05-12 06:54:12

0

您可以指定使用不同的基本類型:

enum : byte MyEnum { ... } 

但這並不刪除需要轉換爲字節(如果你真的想)。 C#中的枚舉允許你通常忘記底層類型,除非你的應用需要它。

你真的需要底層整數嗎?實際上可以將枚舉值的字符串表示存儲在數據庫中,然後在稍後的點see this question處重新創建該字符串的枚舉值。

MSDN給出了a good tutorial的do和do枚舉。

3

不,這是有目的的 - 枚舉有一個基礎數據類型,但它們不被認爲是相同的,因爲這可能產生很多錯誤可能性,這種方式很容易被捕獲。

舉個例子,你說了很多關於不得不一直拋出num的信息 - 我不記得我上次是否做過一次枚舉。我做了很多C#編程。

+0

對不起,你能詳細說明一下嗎?你是否認爲將INT枚舉爲INT是糟糕的編程習慣? – Diskdrive 2010-05-12 07:00:44

+0

那麼,給我舉例你需要什麼? ;)我通常使用它: *數據庫映射(有史以來的一個位置)。 *旗幟檢查(幫手類無論如何,現在在4.0作爲一種方法) 還有什麼?爲什麼你會投它? – TomTom 2010-05-12 07:23:31

+0

哦,好的。我正在使用它,因爲我從Excel文件中獲取數據提取。 我將它轉換爲數據表,我使用枚舉來訪問Datacolumn及其與解壓縮數據相關的映射。 例如。 dr [(int)myEnum.FirstName]比dr [4]更容易理解; 你能想到更好的方法嗎? – Diskdrive 2010-05-12 23:30:28

1

有幾個很好的理由,可能很多壞的將枚舉值轉換爲整數,我假設你有一個很好的理由;)。

如果你是做了很多的int鑄造的擴展方法可能會有所幫助,這裏是一個quicky擴展方法:

public static int EnumCast(this Enum theEnum) 
{ 
    return (int)((IConvertible)theEnum); 
} 

而且在測試中使用的例子:

[Test] 
public void EnumCastTest() 
{ 
    Assert.That(MyEnum.Exit.EnumCast(), Is.EqualTo(4)); 
} 
+0

我無法真正看到這樣做的好處。 您正在編寫比您需要的代碼更多的代碼,並且對int的枚舉轉換永遠不會失敗。 – Diskdrive 2010-05-12 23:42:23

相關問題