0

我有一个枚举和一个类:

public enum Colors { Red = 1, Yellow = 2 }

public class Color {
  public int Value { get; set; }
  public string Name { get; set; }
}

我可以使用 lambda 表达式从枚举颜色值创建一个列表吗?

谢谢你,米格尔

4

4 回答 4

6

假设您的意思是Name属性是 astring而不是int

( ( IEnumerable<int> )Enum.GetValues(typeof(Colors)) )
    .Select(ev =>
    new Color()
    {
        Value = ev,
        Name = Enum.GetName(typeof(Colors), ev)
    })
    .ToList();
于 2013-11-02T00:07:44.287 回答
1

至少有两种方法可以做到(虽然我无法想象你为什么需要这样做):

static void Main( string[] args )
{
  List<Color> colorList1 = Enum.GetValues(typeof(Colors)).Cast<Colors>().Select( c => new Color( c.ToString(), (int)c ) ).ToList() ;
  List<Color> colorList2 = Enum.GetNames(typeof(Colors)).Zip( Enum.GetValues(typeof(Colors)).Cast<int>() , (n,v)=> new Color(n,v)).ToList() ;
  return ;
}
class Color
{
  public Color( string name , int value )
  {
    Name = name ;
    Value = value ;
  }
  public string Name { get ; set ;  }
  public int    Value { get ; set ; }
  public override string ToString()
  {
    return string.Format( "{0}:{1}" , Name , Value ) ;
  }
}
enum Colors
{
  Red    = 1 ,
  Orange = 2 ,
  Yellow = 3 ,
  Green  = 4 ,
  Blue   = 5 ,
  Indigo = 6 ,
  Violet = 7 ,
}
于 2013-11-02T00:43:08.223 回答
1

这将为您提供枚举值的列表。您不需要创建自定义Color类。

var myColorsList = Enum.GetValues(typeof (Colors)).Cast<Colors>().ToList();

如果你真的想使用你的Color对象:

var myColors = Enum.GetValues(typeof (Colors)).Cast<Colors>()
                   .Select(x => new Color{Value = (int)x, Name = x.ToString()})
                   .ToList();
于 2013-11-02T00:04:04.113 回答
1

首先将 Name 属性更改为字符串,然后尝试以下操作:

public enum Colors { Red = 1, Yellow = 2 }

public class Color
{
    public int Value { get; set; }
    public string Name { get; set; }
}

static void Main(string[] args)
{
    var colorClasses = from name in Enum.GetNames(typeof(Colors))
                       select
                       new Color()
                       {
                           Value = (int)Enum.Parse(typeof(Colors), name),
                           Name = name
                       };
}
于 2013-11-02T00:12:52.513 回答