我发现c#不允许泛型类型为enum,所以我在网上做了一些研究并找到了这个帖子Anyone know a good workaround for the lack of an enum generic constraint?,然后我安装了nuget包,但在我的扩展方法中,(T)x.ToInteger()
抛出不能将'int'类型转换为'T'。因此GetDescription()
也不起作用,因为它是我的另一个枚举扩展方法来获取枚举值的描述。如果我用指定的枚举替换'T',以下代码将起作用。任何帮助表示赞赏。
这是我的扩展方法:
public static string ToEnumDescription<T>(this string enumValue)
where T: struct, IEnumConstraint
{
if (enumValue.IsNullOrEmpty()) return string.Empty;
var list = enumValue.Split(',');
var descriptionList = new List<String>();
foreach (var x in list)
{
var description = (x.IsInteger() && Enum.IsDefined(typeof(T), x.ToInteger()))
? ((T)x.ToInteger()).GetDescription()
: string.Empty;
descriptionList.Add(description);
}
return descriptionList.ToCommaSeperatedNoQuote();
}
答案 0 :(得分:1)
作为一种变通方法,您应该可以执行(T)x.ToInteger()
而不是(T)(object)x.ToInteger()
。IF NOT EXISTS
。
这涉及装箱和拆箱价值,但这很可能不是一个重要的性能问题。