我会用枚举做什么?

What would I use an Enum for?

提问人:Aaron 提问时间:11/10/2011 最后编辑:ConnellAaron 更新时间:11/28/2011 访问量:1747

问:

我已经声明了一个枚举类型, 为其分配一个变量 现在我正在把它写到控制台上。 那么枚举类型在实际应用中有什么用呢?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
   class Enum
{
    enum cars
    {
        Toyota, Nissan, Ferrari, Lamborghini
    }
}
class Program
{
    enum cars
    {
        Toyota, Nissan, Ferrari, Lamborghini
    }
    static void Main(string[] args)
    {
        int a = (int)cars.Ferrari;
        Console.WriteLine(a);
    }
}
}
C# 枚举

评论

2赞 sleske 11/10/2011
例如,请参阅以下问题:stackoverflow.com/questions/4709175/why-and-what-for-java-enum/...这是关于 Java 中的枚举,但同样的原则也适用于 C#。
2赞 Karel Frajták 11/10/2011
如果您碰巧使用魔术字符串,那么 Enum 是正确的方法。

答:

2赞 Sai Kalyan Kumar Akshinthala 11/10/2011 #1

您希望在程序中使用枚举值来提高代码清晰度并使其更易于维护。枚举提供更好的错误检查和编译器警告。它们存储常量和重要值。检查枚举以获得更好的说明。

编辑:

  • 枚举可以在现实世界中与 Visual Studio 中的 IntelliSense 一起使用 应用。
  • 当您希望能够在一组之间进行选择时,它们会派上用场 的常量值,并且每个可能的值都与 数字,它们可以在广泛的情况下使用。
  • 枚举类型提供 定义一组命名积分常量的有效方法,这些常量可以 分配给变量。
10赞 Damith 11/10/2011 #2

每当过程接受一组有限的变量时,请考虑使用枚举。枚举使代码更清晰、可读性更强,尤其是在使用有意义的名称时。

使用枚举的好处包括:

  • 减少因转置或错误输入数字而导致的错误。

  • 使将来更改值变得容易。

  • 使代码更易于阅读,这意味着出错的可能性较小 会潜入其中。

  • 确保向前兼容性。使用枚举,代码更少 如果将来有人更改值,可能会失败 对应于成员名称。

参考 : MSDN

2赞 Merlyn Morgan-Graham 11/10/2011 #3
enum cars
{
    Toyota, Nissan, Ferrari, Lamborghini
}

这不是最好的例子,因为汽车的种类比这多得多,而且新的汽车制造商会定期出现,例如小型定制店。

我会用枚举做什么?

你会用它来做一些有不止一次选择的事情,但这些选择是离散的,并且不会(经常)改变。

你会在可能需要 的地方使用它,但你不想只接受任何字符串。string

像这样:

public enum DayOfWeek
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday,
};

public void ScheduleRecurringAppointment(DayOfWeek day)
{
    // Todo: Add appointment to DB here...
}

(请注意,这不是您应该自己编写的枚举。.Net 框架中已经有一个)。

您可以更改枚举,但这很痛苦,因为您必须重新编译使用枚举的所有代码。

1赞 larsmoa 11/10/2011 #4

这可能更有用:

public enum Transmission {
  Manual,
  Automatic,
  SemiAutomatic
}

public class Car
{
   public Transmission CarTransmission { get; set; }
}
0赞 Sandeep Pathak 11/10/2011 #5

以下是使用 an 的优点:enum

  1. 您为客户端代码明确指定哪些值对 变量。

  2. 在 Visual Studio 中,IntelliSense 列出定义的值。

0赞 Fischermaen 11/10/2011 #6

您可以使用枚举类型的变量。他们只会接受枚举的值,这使得编码更容易(我认为)

例如:

Enum Cars { VW, Mercedes, Ford, Opel };

...

Cars myCar = Cars.VW;
0赞 StuartLC 11/10/2011 #7

枚举用于提高代码可读性,可用于将类型限制为一组有限的值。

枚举的一个常见用途是用于对业务流程中的状态进行建模,即不能临时添加新的状态,需要进一步的编码和测试。

1赞 Robel Sharma 11/10/2011 #8

枚举类包含许多用于处理枚举的有用方法。枚举的美妙之处在于,您可以将其处理为整数值并显示为字符串。

您可以在 >> 中找到更多信息 http://www.c-sharpcorner.com/uploadfile/puranindia/enums-in-C-Sharp/

2赞 Connell 11/10/2011 #9

还没有人指出的一件事(除非我错过了)是使用 Enumeration Types 来设置位标志。您可以对枚举值进行按位运算(例如 &|),也可以进行按位比较。这适用于 FlagsAttribute 属性。

[Flags]
enum Days
{
    None = 0x0,
    Sunday = 0x1,
    Monday = 0x2,
    Tuesday = 0x4,
    Wednesday = 0x8,
    Thursday = 0x10,
    Friday = 0x20,
    Saturday = 0x40
}

class MyClass
{
    Days meetingDays = Days.Tuesday | Days.Thursday;
}
0赞 kurupt_89 11/10/2011 #10

下面是一个在 asp.net 中使用枚举来更改每列的标题文本的示例。我使用枚举来指定要更改的网格视图中哪一列的索引。

private enum MENU_ITEM
{ 
    Customer_ID = 0,
    Customer_First_Name = 1,
    Customer_Surname = 2,
    Customer_DOB = 3,
    Customer_Phone_Number = 4,
    Customer_Email = 5,
    Customer_Update = 6,
    Customer_Delete = 7,
    Customer_Transaction = 8
}

private void populateGridHeader()
{
    SearchCustomer_g.Columns[(int)MENU_ITEM.Customer_ID].Visible = false;
    SearchCustomer_g.Columns[(int)MENU_ITEM.Customer_First_Name].HeaderText = "First Name";
    SearchCustomer_g.Columns[(int)MENU_ITEM.Customer_Surname].HeaderText = "Surname";
    SearchCustomer_g.Columns[(int)MENU_ITEM.Customer_DOB].HeaderText = "Date of Birth";
    SearchCustomer_g.Columns[(int)MENU_ITEM.Customer_Phone_Number].HeaderText = "Phone Number";
    SearchCustomer_g.Columns[(int)MENU_ITEM.Customer_Email].HeaderText = "Email";
    SearchCustomer_g.Columns[(int)MENU_ITEM.Customer_Transaction].HeaderText = "New Transaction";
}