2010-01-26 79 views
2
public Enum Days 
{ 
    Monday = 1, 
    Tuesday = 2, 
    Wednesday = 3, 
    Thursday = 4, 
    Friday = 5, 
    Saturday = 6, 
    Sunday = 7 
} 

現在我想知道如何得到一個枚舉的整數值和轉換整數值到枚舉Enum to Int。 Int到Enum。最好的方式來做轉換?

威爾

 int dayNo = (int) Days.Monday; 

變化dayNo到1的值;

請問

 Days day = (Days) 2; 

分配Days.Tuesday給變量一天?

怎麼樣這是最好的方法來解析?

+11

你無法嘗試它並親自看看嗎? – LukeH 2010-01-26 12:58:42

+2

鑄件應該可以工作。順便說一句,在BCL中已經有了'DayOfWeek'枚舉:http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx – 2010-01-26 13:00:12

回答

6

是的,它將會做,除了Enum應該enum

public enum Days 
{ 
    Monday = 1, 
    Tuesday = 2, 
    Wednesday = 3, 
    Thursday = 4, 
    Friday = 5, 
    Saturday = 6, 
    Sunday = 7 
} 

要使用Enum.Parse你必須提供一個字符串,所以如果你想投從INT你必須通過一個字符串去這是醜陋的。

Days x = (Days)Enum.Parse(typeof(Days), "3"); 
Days y = (Days)Enum.Parse(typeof(Days), 3.ToString()); 

...都給你星期三。

1

是的。但是在發佈之前你是否嘗試過?

2

你對枚舉的理解是正確的。

如果您對此方法感覺更舒適,則可以使用Enum.Parse將數字/名稱轉換爲枚舉類型,但它在可讀性或性能方面沒有任何優勢。

奇怪的是,爲了解析數字,你需要首先調用ToString(),因爲Enum.Parse沒有整數超載。

從MSDN頁:

 
Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object. 
+0

謝謝,我只是想知道是否有另一種方式做以上除外解析。 – soldieraman 2010-01-26 13:10:08

+1

'Enum.Parse'不會從'int'轉換爲適當的'enum'值。這個答案充其量是錯誤的或誤導性的。 – jason 2010-01-26 14:10:24

+0

@Jason - 通過文檔,它確實轉換爲等價的枚舉對象。 – Oded 2010-01-26 14:58:05

7

是的,這是很容易檢查:

Days d = (Days)3; 
Console.WriteLine(d); 

這將輸出

Wednesday 

最佳做法是,這個名字你的enum應該是Day而不是Days;上面的變量d代表Day而不是Days。請參閱MSDN上的naming guidelines