1. 程式人生 > >通用的方法獲取列舉內各值的描述

通用的方法獲取列舉內各值的描述

1.定義列舉時直接用中文

由於VS對中文支援的很不錯,所以很多程式設計師都採用了此方案.

缺點:1.不適合多語言 2.感覺不太完美,畢竟大部分程式設計師大部分程式碼都使用英文

2.利用自定義屬性定義列舉值的描述(部落格園大尾巴狼

首先多謝兩位給我的提示,發現在上個版本中所存在的問題:
一、列舉型別的各個列舉值,應該屬於“欄位”。
二、在獲得列舉自定義屬性時,只獲得列舉型別,而不沒有獲得所屬欄位的自定義屬性。

完整工程下載

現在解決方案如下:

列舉定義:  [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;  //選中值