感谢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