2010-01-26 42 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