2014-01-23 49 views
0

我有一堆屬性,所有枚舉的結構。.net通過反射獲取枚舉類型

我喜歡做的是迭代通過屬性,並獲得枚舉的基礎類型或值的枚舉列表。所以我可以爲他們創建dropdownlists,而無需爲每個人編寫代碼。

我設法得到選定的值,名稱的枚舉,說明等,但我卡在這一部分。任何幫助將不勝感激。

+1

你有一些代碼來顯示你如何訪問屬性?有一個Enum.GetValues(類型)來獲取枚舉的值。 –

回答

0

您可以使用反射輕鬆遍歷每個類的屬性,並確定哪些是枚舉,哪些不是(通過使用PropertyType類的IsEnum屬性)。 對於您找到的每個枚舉,可以檢查其基礎類型。

的,你可以使用這樣的通用擴展方法:

public static IDictionary<string, string> EnumToDictionary(this Type t) 
    { 
     if (t == null) throw new NullReferenceException(); 
     if (!t.IsEnum) throw new InvalidCastException("object is not an Enumeration"); 

     string[] names = Enum.GetNames(t); 
     Array values = Enum.GetValues(t); 

     return (from i in Enumerable.Range(0, names.Length) 
       select new { Key = names[i], Value = (int)values.GetValue(i) }) 
        .ToDictionary(k => k.Key, k => k.Value.ToString()); 
    } 

再這樣稱呼它爲您在課堂上所發現的每個枚舉類型:

var result = typeOfEnum.EnumToDictionary(); 

哪裏typeOfEnum是在遍歷類的屬性時找到的枚舉的基礎類型。

然後,您可以使用結果使用枚舉的名稱和值填充適當的下拉列表。