枚举的使用

public   enum  TimeOfDay
{
    Morning 
= 0,
    Afternoon 
= 1,
    Evening 
= 2
}

   static   void  WriteGreeting(TimeOfDay timeOfDay)
        
{
            
switch (timeOfDay)
            
{
                
case TimeOfDay.Morning:
                    MessageBox.Show(
"Good morning");
                    
break;

                
case TimeOfDay.Afternoon:
                    MessageBox.Show(
"Good afternoon");
                    
break;

                
case TimeOfDay.Evening:
                    MessageBox.Show(
"Good evening");
                    
break;

                
default:
                    MessageBox.Show(
"Hello World");
                    
break;
            }

        }


        
private   void  Form1_Load( object  sender, EventArgs e)
        
{
            
string[] sArray = Enum.GetNames(typeof(TimeOfDay));
            
this.comboBox1.DataSource = sArray;
        }


        
private   void  comboBox1_SelectedIndexChanged( object  sender, EventArgs e)
        
{
            
string str = this.comboBox1.Text;
            TimeOfDay time 
= (TimeOfDay)Enum.Parse(typeof(TimeOfDay),str,true);
            MessageBox.Show(time.ToString() 
+ "----" + ((int)time).ToString());
        }

 

下面转载一片网上关于枚举的文章:
这段时间手里有个有关订单的项目,订单一般有个状态的,以前很多要时候都会想到订单的状态就那几个种,就把它写死吧,不用一个数据库表了,太浪费资源了,但写死了用一个数字来代表一种订单状态,这样在编码时还要记得什么数字代码什么状态,如果不小心把它写错了,会导致数据出错。
      后来想到.NET有个枚举,这么好的东西为何不用上来呢,这不但可以方便以后的代码维护,也方便编码。

public   enum  OrderState
{
    
/// <summary>
    
/// 无效状态
    
/// </summary>

    Invalid = 0,
    
/// <summary>
    
/// 客户询价
    
/// </summary>

    CustomerQuery = 1,
    
/// <summary>
    
/// 客户落单
    
/// </summary>

    CustomerOrdered = 2,
    
/// <summary>
    
/// 客户付款
    
/// </summary>

    ReceiverCustomerPayment = 4,
    
/// <summary>
    
/// 向供货商订货
    
/// </summary>

    SupplierOrdered = 8,
    
/// <summary>
    
/// 供货商确认货期
    
/// </summary>

    SupplierOrderTerm = 16,
    
/// <summary>
    
/// 收到货品
    
/// </summary>

    RecieverGoods = 32,
    
/// <summary>
    
/// 客户取消订单
    
/// </summary>

    CustomerCanceled = 64,
    
/// <summary>
    
/// 供货商取消订单
    
/// </summary>

    SupplierCancelded = 128
}
但要从UI层看这些状态怎么处理呢?
利用switch case
public   static   string  GetOrderStateString(OrderState state)
    
{
        
switch (state)
        
{
            
case OrderState.Invalid:
                
return "无效值";
            
case OrderState.CustomerOrdered:
                
return "客户下单";
            
case OrderState.CustomerCanceled:
                
return "客户取消订单";
            
case OrderState.CustomerQuery:
                
return "客户询价";
            
case OrderState.ReceiverCustomerPayment:
                
return "客户已付款";
            
case OrderState.RecieverGoods:
                
return "订单到货";
            
case OrderState.SupplierCancelded:
                
return "供货商取消";
            
case OrderState.SupplierOrdered:
                
return "已向供货商订货";
            
case OrderState.SupplierOrderTerm:
                
return "供货商确认货期";
        }

        
return "";
    }

利用自定义属性,定义枚举值的详细文本,完美解决

首先多谢两位给我的提示,发现了上个版本中所存在的问题:
一、枚举类型的各个枚举值,应该属于“字段”。
二、在获得枚举自定义属性时,只获得枚举类型,而不没有获得所属字段的自定义属性。

完整工程下载

现在解决方案如下:
枚举定义:
 [EnumDescription( " 订单、订单中的产品、产品项的状态。 " )]
 
public   enum  OrderStateEnum
 
{
  [EnumDescription(
"未开始")]
  Ready 
= 0,
 
  [EnumDescription(
"进行中")]
  Processing,
 
  [EnumDescription(
"等待中")]
  Waiting,
 
  [EnumDescription(
"取消")]
  Canceled,
 
  [EnumDescription(
"完成")]
  Finished
 }
 
代码访问:
0、获得枚举类型的文字描述
string txt = EnumDescription.GetEnumText(typeof(OrderStateEnum));
 
1、获得某个枚举值的文字描述: 
string txt = EnumDescription.GetFieldText(OrderStateEnum.Processing)
 
2、获得枚举中各个字段的定义数组:
EnumDescription[] des = EnumDescription.GetFieldTexts(typeof(OrderStateEnum))
如果需要排序,通过他的另一个重载   public static EnumDescription[] GetFieldTexts( Type enumType, SortType sortType )
 
3、绑定到下拉框:
comboBox1.DataSource  =  EnumDescription.GetFieldTexts( typeof (OrderStateEnum));
comboBox1.ValueMember 
=   " EnumValue " ;
comboBox1.DisplayMember 
=   " EnumDisplayText " ;
comboBox1.SelectedValue 
=  ( int )OrderStateEnum.Finished;   // 选中值

你可能感兴趣的:(枚举)