【发布时间】:2019-02-11 13:27:46
【问题描述】:
感谢this 的问题,我设法将我的通用方法限制为只接受枚举。
现在我正在尝试创建一个通用方法,以便我可以将下拉列表绑定到我选择的任何枚举,在下拉列表中显示描述,其值等于 numeric 枚举值的值。
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() ) 应该可以正常工作。