0

我发现 c# 不允许泛型类型为枚举,所以我在网上做了一些研究并找到了这个线程有人知道缺少枚举泛型约束的好方法吗?,然后我安装了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();
}
4

1 回答 1

2

作为一种解决方法,而不是(T)x.ToInteger()你应该能够做到:(T)(object)x.ToInteger().

这涉及对值进行装箱和拆箱,但这很可能不是重要的性能问题。

于 2017-03-24T21:14:07.703 回答