2017-03-24 32 views
0

我發現C#不允許泛型類型是枚舉,所以我做了一些研究,在網上找到這個線程Anyone know a good workaround for the lack of an enum generic constraint?,然後我安裝了NuGet包,但在我的擴展方法,(T)x.ToInteger()拋出不能將類型'int'轉換爲'T'。因此GetDescription()也不起作用,因爲它是我另一個枚舉擴展方法來獲取枚舉值的描述​​。如果我用指定的Enum替換'T',下面的代碼將起作用。任何幫助表示讚賞。 這裏是我的分機methos:無法施展整數的枚舉泛型方法

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

作爲一種解決辦法,而不是(T)x.ToInteger()你應該能夠做到:(T)(object)x.ToInteger()

這涉及裝箱和拆箱的價值,但最有可能不是一個重大的性能問題在這裏。

+0

很好,現在我可以將int轉換爲T,但在使用GetDescription()擴展方法之前,'T'必須轉換爲System.Enum。 –