我有一个枚举和一个类:
public enum Colors { Red = 1, Yellow = 2 }
public class Color {
public int Value { get; set; }
public string Name { get; set; }
}
我可以使用 lambda 表达式从枚举颜色值创建一个列表吗?
谢谢你,米格尔
我有一个枚举和一个类:
public enum Colors { Red = 1, Yellow = 2 }
public class Color {
public int Value { get; set; }
public string Name { get; set; }
}
我可以使用 lambda 表达式从枚举颜色值创建一个列表吗?
谢谢你,米格尔
假设您的意思是Name
属性是 astring
而不是int
( ( IEnumerable<int> )Enum.GetValues(typeof(Colors)) )
.Select(ev =>
new Color()
{
Value = ev,
Name = Enum.GetName(typeof(Colors), ev)
})
.ToList();
至少有两种方法可以做到(虽然我无法想象你为什么需要这样做):
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 ,
}
这将为您提供枚举值的列表。您不需要创建自定义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();
首先将 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
};
}