感謝this問題,我設法解決如何限制我的泛型方法只接受枚舉。如何在泛型方法中獲取枚舉的數據值?
現在我試圖創建一個通用的方法,以便我可以將下拉列表綁定到任何我選擇的枚舉上,在下拉列表中顯示描述,其值等於數字的值枚舉值。
public static object EnumToDataSource<T>() where T : struct, IConvertible {
if (!typeof(T).IsEnum) // just to be safe
throw new Exception(string.Format("Type {0} is not an enumeration.", typeof(T)));
var q = Enum.GetValues(typeof(T)).Cast<T>()
.Select(x => new { ID = DataUtil.ToByte(x), Description = x.ToString() }) // ToByte() is my own method for safely converting a value without throwing exceptions
.OrderBy(x => x.Description);
return q;
}
看起來不錯,但ToByte()總是返回0,即使我的枚舉值顯式設置,就像這樣:
public enum TStatus : byte {
Active = 1,
Inactive = 0,
}
以外的通用方法,如果我投TStatus
類型的值到byte
,它完美的作品。在通用方法中,如果我嘗試將類型爲T
的東西轉換爲byte
,則會出現編譯器錯誤。 我在Enum靜態接口中找不到任何東西來做到這一點。
那麼,如何才能獲得通用內部枚舉的數值? (我也會接受關於感激優化我的代碼的任何其他建議...)
編輯:呃,呃......原來,事情是行不通的 - 因爲是在一個錯誤我的ToByte()方法...(臉紅)。噢,謝謝 - 我從中學到了很多東西!
Convert.ToByte()或Enum.Parse(typeof(T),tVal.ToString())應該可以正常工作。 – LBushkin 2009-07-23 14:52:26