2011-11-21 64 views
4

我不知道該怎麼以下行從VB轉換爲C#:獲得由枚舉值轉換爲泛型列表

Dim values As New List(Of T)(System.Enum.GetValues(GetType(T))) 

我的版本不工作:

List<T> values = new List<T>(System.Enum.GetValues(typeof(T))); 

最佳重載方法匹配 'System.Collections.Generic.List.List(System.Collections.Generic.IEnumerable)' 有一些無效參數

構造函數參數不採用這種方式 - 我丟了什麼cast(或者其他)?

爲了澄清:這是結束了以下通用方法

public static void BindToEnum<T>() 
{ 
    List<T> values = new List<T>(System.Enum.GetValues(typeof(T))); 
    //... 
} 

回答

8

使用LINQ中:

List<T> list = System.Enum.GetValues(typeof(T)) 
          .Cast<T>() 
          .ToList<T>(); 
+0

呀,對LINQ! – QueueHammer

3

只需添加一個.Cast<T>()

List<T> values = new List<T>(System.Enum.GetValues(typeof(T)).Cast<T>()); 
0

基於這個職位,我爲自己創造了一個功能,在單元測試中,當你想遍歷一個Enum的所有值來驗證某些東西只能在某些值上工作時,這非常棒。

public static IEnumerable<T> GetEnumValues<T>() 
{ 
    return Enum.GetValues(typeof(T)).Cast<T>(); 
} 

然後我就可以使用它像這樣:

var values = GetEnumValues<SomeTypeCode>(); 

var typesToAlwaysShow = values.Where(ScreenAdapter.AlwaysShowThisType).Select(q => (int)q).ToList(); 

Assert.Equal("101,102,105,205", string.Join(",", typesToAlwaysShow));