什么是枚举,我们在哪里可以使用它?

每当我使用Liststringbool等我编码时,我都没有看到任何enum.的使用enum. 我有一个想法,即enum是一个常数,但在实践中,我们在哪里实际使用它。 如果可以的话,我们可以使用一个

 public const int x=10; 

我们在哪里实际使用它?

请帮助我

enum是一种使用名称而不是数字的便捷方式,以表示某些内容。 它使您的代码比使用数字更具可读性和可维护性。 例如,让我们说1是红色,2是绿色。 以下内容更具可读性:

 if(color == 1) { Console.WriteLine("Red"); } if(color == 2) { Console.WriteLine("Green"); } 

或这个:

 enum Color { Red, Green} if(color == Color.Red) { Console.WriteLine("Red"); } if(color == Color.Green) { Console.WriteLine("Green"); } 

此外,让您在代码库中的20个位置进行上述检查,并且由于某种原因,您必须将Red的值从1更改为3,将Green的值从2更改为5。 如果你遵循了第一种方法,那么你必须在20个地方改变1到3和2到5! 如果您遵循第二种方法,那么以下就足够了:

 enum Color { Red = 3 , Green = 5 } 

常量允许我们在代码中的一个位置定义值的名称。

枚举就像定义一组常量一样,让我们​​声明只能使用其中一个常量的变量,属性和参数。

例如,假设我们在网站上收到订单的SalesOrder类,并且每个SalesOrder都可以具有状态 – 可能是New,Shipped,Cancelled等。

我们可以这样做:

 public class SalesOrder { public string OrderStatus {get;set;} 

但是有人可能会将该属性设置为完全无效的东西,例如

 order.OrderStatus = "Hello!"; 

我们可以决定我们会给每个状态一个数字,以防止有人使用一些疯狂的价值。 所以我们改成它

 public class SalesOrder { public int OrderStatusCode {get;set;} 

并且我们决定1 =新的,2 =发货,3 =取消等等。但是这仍然没有解决任何问题,因为有人可以设置OrderStatusCode = -666并且我们仍然搞砸了。

在这些情况中的任何一种情况下,我们都可以使用常量来改进

 const string SHIPPED_ORDER_STATUS = "Shipped"; 

要么

 const int NEW_ORDER_STATUS_CODE = 1; 

但这仍然没有真正解决问题。 它有助于我们这样做:

 order.OrderStatusCode = NEW_ORDER_STATUS_CODE; 

这很好。 但它仍然无法阻止这种情况:

 order.OrderStatusCode = 555; //No such order status code! 

enum让我们这样做:

 public enum OrderStatuses { New, Shipped, Canceled } public class SalesOrder { public OrderStatuses OrderStatus {get;set;} 

现在不可能将OrderStatus设置为任何无效值。 它只能是OrderStatuses中的值之一。

比较也变得容易多了。 代替

 if(string.Equals(order.OrderStatus,"shipped",Ordinal.IgnoreCase)) 

要么

 if(order.OrderStatusCode == 3) //What does three mean? Magic number! 

我们可以做的

 if(order.OrderStatus == OrderStatuses.Shipped) 

现在它可读且易于维护。 编译器将阻止使用任何无效值。 如果您决定要在OrderStatuses更改值的名称,只需右键单击并重命名即可。 你不能用stringint来做到这一点。

因此, enum在该场景中非常有用 – 如果我们想要一个具有有限的预定义值集的类型。


常量的最常见用法是,如果我们在代码中放入一个字符串或数字,它们要么重复,要么没有明显的含义,比如

 if(myString.Length > 434) //What is 434? Why do I care if it's more than 434? 

我们可能会声明一个常数

 const int MAX_FIELD_LENGTH = 434; 

现在这是有道理的:

 if(myString.Length > MAX_FIELD_LENGTH) //Now it's obvious what this check is for. 

这是一个小细节,但它标志着我们的意图,并阻止我们在多个地方存储价值。

假设您需要在具有角色的软件中标记用户,那么您可以声明枚举来定义这些角色,例如:

 public enum UserRole { Master = 1, Developer = 2, Tester = 3, Manager = 4 } 

然后,您可以在User实体中使用此类型UserRole 。 它作为整数值工作,但它比整数更易读。

你可以实现这样的事情:

 if (user.Role == UserRole.Master) { // some action for master } else if (user.Role == UserRole.Developer) { // another action for developer } 

要么

 switch (user.Role) { case UserRole.Master: // some action for master break; case UserRole.Developer: // some action for developer break; case UserRole.Tester: // some action for tester break; case UserRole.Manager: // some action for manager break; } 

只需在枚举上添加更多内容:枚举器命名为常量。 如果在应用程序中使用一组命名常量,则可以使用枚举而不是对这些常量进行硬编码。 每个枚举类型都有一个底层类型,除了char之外,它可以是任何整数类型。 枚举元素的默认基础类型是int。 但您可以更改默认类型。

  enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 

默认情况下,第一个枚举数的值为0,每个连续枚举数的值增加1.例如,在下面的枚举中,Sat为0,Sun为1,Mon为2,依此类推。 您可以更改第一个值

 enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri}; 

强制元素序列从1开始而不是0开始。

您可以更改枚举的默认类型,但必须是任何整数类型。

 enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri}; 

实际场景您可以创建项目任务的状态枚举

 public enum Status { started, completed, notstarted } 

你可以像使用枚举一样

 Status.started