在Generic方法中无法将整数转换为Enum

时间:2017-03-24 21:04:50

标签: c# generics enums unconstrained-melody

我发现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();
}

1 个答案:

答案 0 :(得分:1)

作为一种变通方法,您应该可以执行(T)x.ToInteger()而不是(T)(object)x.ToInteger()IF NOT EXISTS

这涉及装箱和拆箱价值,但这很可能不是一个重要的性能问题。