回答
的列表阐述贝瑞的帖子:
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
“IEnumerable是一个数组”:它不是一个数组,因为您不能使用索引器访问元素。您只能使用'foreach'或'IEnumerator
这是一个列表,它提供了一个迭代器来迭代列表......不像数组那样,没有定义的索引值。 – Armstrongest 2010-06-17 20:47:19
打算假设你的意思是enum
超过IEnumerable<T>
。
枚举非常适合以半安全的方式对相关的一组命名值进行分组。
我最喜欢使用enum
的例子是替换布尔参数。
例如下面的代码是等效的,但是一个比另一个
String.Compare(str1,str2,true);
String.Compare(str1,str2,StringComparison.OrdinalIgnoreCase);
你有某种神奇的价值和意义之间映射的任何时候显著更具可读性,那么你应该考虑使用一个枚举来代替。这样你可以直接使用枚举常量而不是魔术值。
例如,你可以有这样的事情:
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你有很多代码改变使
枚举是一种可以有多个值的类型。
,而不用声明一个名为颜色可变,并赋予它的字符串“蓝色”或“绿色”
你可以创建一个枚举,并定义颜色蓝色,绿色等
这让的如果您的应用不支持红色,编译器会强制执行限制。
否则,你会得到一个更难以调试的运行时错误,或者更长的错误检查例程。
编辑
正如DTB说,在某些语言中,所列举的都是真正在幕后只是整数,所以可以将号码分配给他们。如果你正确地使用它们,你会这样做,但它仍然是一个有效的点。
'var c =(Color)99;''enum Color {Blue,Green}'完全没问题......不确定你的意思是执行限制这里。 – dtb 2010-06-17 20:21:22
将描述与字符串绑定。例如,在您的数据库中,您有一个存储0,1,2,3的“教育状态”列。他们与'高中','同事','单身汉'和'主人'联系在一起。在您的应用程序中,您可以进行枚举以帮助保持这些值。
enum int EducationStatus
{
highschool,
associates,
bachelor,
masters
}
所以你可以说
if(yourRecord.EducationStatus == EducationStatus.highschool)
...
,而不是0。此外,这将有助于保持,而不是总是假设0意味着高中值均匀,使用高中,如果它更改为6,你在一个地方做了这个改变。
的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);
IEnumerable<T>
是用于标记具有枚举类(通常集合)的接口;即你可以迭代他们的元素。
IEnumerator<T>
是一个包含遍历枚举数的方法的接口;通常它被用来逐个处理一个集合的元素。 foreach
语言构造是编译器魔术,可以为您执行所有必要的操作来遍历IEnumerator。
用于定义相关,命名常量
- 1. MvvmCross:枚举MvxRequestedByType的目的是什么?
- 2. 什么枚举
- 3. 获取枚举或返回枚举数的区别是什么?
- 4. Object.create中的枚举参数是什么?
- 5. 什么是TypeScript中的枚举标志?
- 6. Python中枚举的意思是什么?
- 7. 什么是HTML中的枚举属性?
- 8. 什么是Objective-C的枚举类型
- 9. 什么是枚举的返回类型|?
- 10. 什么是通枚举类型的WebAPI
- 11. 什么是System.Windows.Forms.Keys枚举中的“OEM”键?
- 12. 为什么枚举包括可枚举
- 13. Keys枚举中的 - (减/下划线)和=(相等/加)键的枚举是什么?
- 14. DateTimeStyles.RoundtripKind枚举是什么意思?
- 15. 是什么这两个枚举
- 16. Java7/WatchEvent - 为什么它不是枚举?
- 17. 这个枚举是什么意思?
- 18. 在枚举枚举之前通过IEnumberable调用Any()的好处是什么?
- 19. 是枚举Java中的枚举
- 20. 什么时候Task.WhenAll枚举?
- 21. 举办活动的目的是什么?
- 22. 什么使用除了枚举的c#
- 23. 为什么Python的枚举太慢?
- 24. 什么是枚举用户的活动目录所需的安全权限
- 25. 带枚举的MySQL枚举
- 26. 枚举命名目的地
- 27. 为什么所有的opengl枚举都是十六进制的?
- 28. 什么是java spring中的枚举类的bean id?
- 29. 什么是getfield命令,SetField,getProperty和的SetProperty中的BindingFlags枚举?
- 30. 为什么@objc枚举与纯粹的Swift枚举有不同的描述?
你的意思'IEnumerable的'或'enum'? –
JaredPar
2010-06-17 20:19:06
你能澄清一下吗?你的意思是一种实现IEnumerable()的类型,或者像一个具有一定数量值的'enum'? –
2010-06-17 20:19:34
@JaredPar,显然他自己不知道...... – Dykam 2010-06-17 20:35:40