枚举的目的?

时间:2010-06-17 20:15:51

标签: c#

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

你用过enum吗?请给我看一下示例代码

8 个答案:

答案 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改为现在意味着你需要进行大量的代码更改

你可以read more about enumerations here on MSDN

答案 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)

Enum基本上是相关常量的列表。

e.g

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

可以找到完整的示例here

答案 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);