有人可以给我一些使用枚举的例子吗?我不明白这个概念。我的意思是IEnumerable和enum?
你用过enum吗?请给我看一下示例代码答案 0 :(得分: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)如果你想将Sat改为现在意味着你需要进行大量的代码更改
答案 1 :(得分:3)
枚举是一种可以有多个值的类型。
而不是声明一个名为color的变量,并为其指定字符串“blue”或“green”
您可以创建枚举,并将颜色定义为蓝色,绿色等。
如果您的应用不支持红色,则允许编译器强制执行限制。
否则,您将收到一个更难以调试的运行时错误,或者更长的错误检查例程。
修改
正如dtb所说,在某些语言中,枚举实际上只是整数,因此可以为它们分配数字。如果你正确使用它们,你将会这样做,但它仍然是一个有效的点。
答案 2 :(得分: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
答案 3 :(得分:2)
答案 4 :(得分:2)
enum
关键字声明枚举:http://msdn.microsoft.com/en-us/library/sbbt4032(VS.80).aspx
Enum
是包含一组已定义常量的类型。例如,您可能具有如下定义的枚举:
public enum Months
{
January = 1,
February = 2,
March = 3,
...
December = 12
}
在您的代码中,您可以使用以下内容:
Months birthMonth = Months.February;
当您拥有变量的多个离散值并提高代码的可读性时, Enum
非常有用。例如,以下哪一项有更明确的意图?
File.Open("myFile.txt", 1, 3);
或
File.Open("myFile.txt", FileMode.Create, FileAccess.ReadWrite);
答案 5 :(得分:2)
IEnumerable<T>
是一个用于标记具有枚举器的类(通常是集合)的接口;即你可以遍历他们的元素
IEnumerator<T>
是一个包含迭代枚举器的方法的接口;通常它用于一次一个地浏览集合的元素。 foreach
语言构造是编译器魔术,可以执行所有必要的操作来为您迭代IEnumerator。
enum
用于定义相关的命名常量列表
答案 6 :(得分:1)
将描述绑定到字符串。例如,在您的数据库中,您有一个“教育状态”列,存储0,1,2,3。他们与“高中”,“同事”,“单身汉”和“大师”联系在一起。在您的应用程序中,您进行枚举以帮助保持这些值。
enum int EducationStatus
{
highschool,
associates,
bachelor,
masters
}
所以你可以说
if(yourRecord.EducationStatus == EducationStatus.highschool)
...
而不是0.此外,这将有助于保持值均匀,而不是总是假设0表示高中,您使用高中,如果它更改为6,则在一个地方进行更改。
答案 7 :(得分:0)
假设您的意思是enum
超过IEnumerable<T>
。
枚举非常适合以半安全的方式对一组相关的命名值进行分组
我最喜欢使用enum
的例子是替换布尔参数。
例如,以下代码是等效的,但其中一个比其他代码更具可读性
String.Compare(str1,str2,true);
String.Compare(str1,str2,StringComparison.OrdinalIgnoreCase);