2011-11-10 106 views
3

我已经声明了一个枚举类型, 为它分配了一个变量 ,现在我正在将它写入控制台。 那么枚举类型在真实世界的应用程序中有什么用处?我会用Enum做什么?

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); 
    } 
} 
} 
+2

参见例如这个问题:http://stackoverflow.com/questions/4709175/why-and-what-for-java-enum/4709224#4709224这是关于在Java中的枚举,但同样的原则适用于C#。 – sleske

+2

如果你碰巧使用过魔法字符串,那么Enum是正确的。 –

回答

10

每当过程接受一组有限的变量时,请考虑使用枚举。枚举使代码更加清晰易读,特别是在使用有意义的名称时。

使用枚举的优点包括:

  • 降低由调换或错误输入号码错误。

  • 可以很容易地改变未来的价值。

  • 使代码更容易阅读,这意味着错误 将不太可能会进入它。

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

裁判:MSDN

2

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

编辑:

  • 枚举可以智能感知现实世界 应用程序可以使用Visual Studio中。
  • 当您希望能够在恒定值的集合 和与 号码相关的每个可能值之间进行选择时,它们就派上用场了,它们可以用于各种各样的情况。
  • 枚举类型为 提供了一种有效的方法来定义可以将 分配给变量的一组命名积分常量。
2
enum cars 
{ 
    Toyota, Nissan, Ferrari, Lamborghini 
} 

这不是最好的例子,因为有更多的方式各类汽车比,以及新的汽车制造商经常弹出,如小小的定制商店。

我会用Enum做什么?

您可以将它用于具有多次选择的事物,但这些选择是离散的,并且不会改变(经常)。

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

喜欢的东西:

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

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

(注意,这是不是你应该自己写一个枚举有one in the .Net framework already)。

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

1

这很可能是更为有用:

public enum Transmission { 
    Manual, 
    Automatic, 
    SemiAutomatic 
} 

public class Car 
{ 
    public Transmission CarTransmission { get; set; } 
} 
0

以下是使用enum的优点:

  1. 您明确指定的客户端代码值有效的 变量。

  2. 在Visual Studio,智能感知列出定义的值。

0

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

例如:

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

... 

Cars myCar = Cars.VW; 
0

枚举是代码的可读性,并且可以使用的类型限制的有限集合值。

一个常见用途枚举的是在业务流程国家建模 - 即新的国家不能在临时基础上增加,并且将需要进一步的编码和测试。

2

一两件事,没有人指出,但(除非我错过了它)是利用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

继承人一个在asp.net中使用枚举来更改每列的标题文本的示例。我使用枚举来指定我想改变的gridview中哪一列的索引。

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"; 
} 
相关问题