2010-06-17 81 views
1

有人可以请给我一些枚举的例子吗?我不明白这个概念。我的意思是IEnumerable和枚举?枚举的目的是什么?

你用过enum吗?请告诉我示例代码

+5

你的意思'IEnumerable的'或'enum'? – JaredPar 2010-06-17 20:19:06

+0

你能澄清一下吗?你的意思是一种实现IEnumerable()的类型,或者像一个具有一定数量值的'enum'? – 2010-06-17 20:19:34

+4

@JaredPar,显然他自己不知道...... – Dykam 2010-06-17 20:35:40

回答

3

的列表阐述贝瑞的帖子:

enum Title 
{ 
Mr =1, 
Mrs, 
Miss 
} 


一个ENUM是一个用户定义的类型。使用上面的枚举器,您可以根据需要创建标题的任意多个实例。

Title mine = Title.Mr; 
Title sister = Title.Miss; 
etc. 



一个IEnumerable是枚举类型的数组。使用foreach语句对我最有帮助。

IEnumerable<string> list = new[] {"stringone", "string2", "stringthree"}; 

foreach (string s in list) 
{ 
    Console.WriteLine(s); 
} 

将产生以下的输出:

stringone 
string2 
stringthree 
+2

“IEnumerable是一个数组”:它不是一个数组,因为您不能使用索引器访问元素。您只能使用'foreach'或'IEnumerator '接口。 – 2010-06-17 20:44:20

+0

这是一个列表,它提供了一个迭代器来迭代列表......不像数组那样,没有定义的索引值。 – Armstrongest 2010-06-17 20:47:19

0

打算假设你的意思是enum超过IEnumerable<T>

枚举非常适合以半安全的方式对相关的一组命名值进行分组。
我最喜欢使用enum的例子是替换布尔参数。

例如下面的代码是等效的,但是一个比另一个

String.Compare(str1,str2,true); 
String.Compare(str1,str2,StringComparison.OrdinalIgnoreCase); 
8

你有某种神奇的价值和意义之间映射的任何时候显著更具可读性,那么你应该考虑使用一个枚举来代替。这样你可以直接使用枚举常量而不是魔术值。

例如,你可以有这样的事情:

string getDayOfWeek(int dayOfWeek) 
{ 
    if(dayOfWeek == 0) 
    return "saturday"; 
    else if(... 
} 

而不是使用,你可以代替已枚举定义一个int输入参数:

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 
string getDayOfWeek(Days dayOfWeek) 
{ 
    if(dayOfWeek == Days.Sat) 
    return "saturday"; 
    else if(... 
} 

getDayOfWeek功能的第一种变体认为不好的原因有两个:
1)很难阅读,因此难以维护并且更容易在代码中犯错
2)If你想改变星期六到现在的意思是1你有很多代码改变使

你可以read more about enumerations here on MSDN

3

枚举是一种可以有多个值的类型。

,而不用声明一个名为颜色可变,并赋予它的字符串“蓝色”或“绿色”

你可以创建一个枚举,并定义颜色蓝色,绿色等

这让的如果您的应用不支持红色,编译器会强制执行限制。

否则,你会得到一个更难以调试的运行时错误,或者更长的错误检查例程。

编辑

正如DTB说,在某些语言中,所列举的都是真正在幕后只是整数,所以可以将号码分配给他们。如果你正确地使用它们,你会这样做,但它仍然是一个有效的点。

+0

'var c =(Color)99;''enum Color {Blue,Green}'完全没问题......不确定你的意思是执行限制这里。 – dtb 2010-06-17 20:21:22

1

将描述与字符串绑定。例如,在您的数据库中,您有一个存储0,1,2,3的“教育状态”列。他们与'高中','同事','单身汉'和'主人'联系在一起。在您的应用程序中,您可以进行枚举以帮助保持这些值。

enum int EducationStatus 
{ 
    highschool, 
    associates, 
    bachelor, 
    masters 
} 

所以你可以说

if(yourRecord.EducationStatus == EducationStatus.highschool) 
... 

,而不是0。此外,这将有助于保持,而不是总是假设0意味着高中值均匀,使用高中,如果它更改为6,你在一个地方做了这个改变。

2

一个枚举基本上是一个相关常量的列表。

e.g

enum Title 
{ 
Mr =1, 
Mrs, 
Miss, 
Sir, 
Madame 
} 

完整的例子可以发现here

2

enum关键字声明一个枚举http://msdn.microsoft.com/en-us/library/sbbt4032(VS.80).aspx

Enum s为含有一组定义的常量的类型。例如,你可能有这样定义一个枚举:

public enum Months 
{ 
    January = 1, 
    February = 2, 
    March = 3, 
    ... 
    December = 12 
} 

在代码中,你可以使用此类似如下:

Months birthMonth = Months.February; 

Enum s为当你有多个,离散值有用为一个变量,并增加您的代码的可读性。例如,以下哪一项有更明确的意图?

File.Open("myFile.txt", 1, 3); 

File.Open("myFile.txt", FileMode.Create, FileAccess.ReadWrite); 
2

IEnumerable<T>是用于标记具有枚举类(通常集合)的接口;即你可以迭代他们的元素。
IEnumerator<T>是一个包含遍历枚举数的方法的接口;通常它被用来逐个处理一个集合的元素。 foreach语言构造是编译器魔术,可以为您执行所有必要的操作来遍历IEnumerator。
用于定义相关,命名常量