从枚举中获取值到通用列表

时间:2011-11-21 14:44:03

标签: c# vb.net generics

我不知道如何将以下行从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)'   有一些无效的论点

构造函数参数不会这样 - 我丢失了什么演员(或其他)?

澄清:它包含在以下通用方法中

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

3 个答案:

答案 0 :(得分:11)

使用LINQ:

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

答案 1 :(得分:3)

只需添加.Cast<T>()

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

答案 2 :(得分:0)

基于这篇文章,我创建了一个为我做这个的功能;当你想循环遍历枚举的所有值以验证某些东西只适用于某些值时,它在单元测试中表现很好。

bookshelf.transaction(function (t) {
  var modelLocation = new Models.Location({'name':event.venue});
  return modelLocation
    .fetch()
    .then(function (fetchedLocation) {
        if (!fetchedLocation) {
            modelLocation
              .save(null,{transacting:t});
        }
    })l
});

然后我可以像这样使用它:

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