我想有一个方法可以从可空的数据库列解析枚举。 我在下面编写了这个方法(并且必须将T限制为一个结构以使其编译)。
它确实编译,但我认为它的错误,因为枚举不是结构? 如果是这样,我如何限制泛型方法说我期待一个你不必向我抱怨的ValueType"只有非可空的值类型可能是' System.Nullable&的基础#39;
private static T? ParseEnum<T>(DataRow row, string columnName)
where T : struct
{
T? value = null;
try
{
if (row[columnName] != DBNull.Value)
{
value = (T)Enum.Parse(
typeof(T),
row[columnName].ToString(),
true);
}
}
catch (ArgumentException) { }
return value;
}
答案 0 :(得分:3)
不幸的是,C#中没有可用的限制,允许您限制给定类型是枚举。在IL中有这样的概念。乔恩blogged about it。
答案 1 :(得分:1)
我认为您可以尝试使用动态并在运行时创建枚举的枚举列表
public static dynamic ToValues(this Type enumType)
{
var values = Enum.GetValues(enumType);
Type list = typeof(List<>);
Type resultType = list.MakeGenericType(enumType);
dynamic result = Activator.CreateInstance(resultType);
foreach (var value in values)
{
dynamic concreteValue = Enum.Parse(enumType, value.ToString());
result.Add(concreteValue);
}
return result;
}
因此,您将拥有具体枚举列表