在我的项目中,我有一个enum
,其中我存储了音乐流派的值,如下所示:
enum Genres { Rock,Pop,Disco,Sport,Talk,Metal,Hard_Rock,Electro,Classic_Rock}
现在在我的代码中我想要一个foreach
循环,它将根据音乐类型做一些工作。这样的事情:
foreach(Genres genre in Enum.GetValues(typeof(Genres)))
{
switch(genre)
{
case Genres.Disco:
//Do Something
break;
case Genres.Rock:
//Do Something
break;
.....
.......
}
}
我想要做的是将enum
案例中的switch
视为数组。这样的事情:
foreach(Genres genre in Enum.GetValues(typeof(Genres)))
{
switch(genre)
{
case Genres[0]:
//Do Something
break;
case Genres[1]:
//Do Something
break;
.....
.......
}
}
这可能吗?提前谢谢。
EDIT
我有一个ListBox,我想用GenreItems填充它。但是对于每个ListBoxItem,我想要一个不同的名称屁股我传递它们。所以我做这个开关以检查类型和案例是Rock例如我将ListBoxItem设置为ROCK并将其添加到ListBox中。
答案 0 :(得分:2)
除非你做一些调整,否则我认为这是不可能的......例如,使用静态数组存储所有值:
public static readonly Genres[] AllGenres = Enum.GetValues(typeof(Genres)).Cast<Genres>().ToArray();
// sample:
public void test()
{
var first = AllGenres [0];
}
修改
现在我明白了你的需要。你真的想要一个列表绑定到一个控件。如果您认为只需要描述,我想您可能想尝试使用属性到枚举,然后编写一个通用方法来检索枚举项并将其包装为对象,如:
public enum Genres
{
[Description("Rock!!!")]
Rock,
Pop,
Disco,
Sport,
Talk,
Metal,
Hard_Rock,
Electro,
[Description("Classic Rock")]
Classic_Rock
}
public class EnumItem
{
string Name { get; set; }
string Description { get; set; }
Enum EnumValue {get;set;}
public static IEnumerable<EnumItem> GetValue(Type t)
{
// implementation using reflection/expression
}
}
// then you can use the retrieved list/whatever to do binding or so...
你可以进一步调整它以满足你的需求(例如,使用类型约束使其更好) - 更重要的是,这将成为服务所有枚举类型的通用类......
答案 1 :(得分:1)
根据您的编辑,它看起来像你想要的
foreach(var genre in Enum.GetNames(typeof(Genres)))
{
listBox.Items.Add(genre.ToUpperInvariant());
}
答案 2 :(得分:0)
foreach(Genres genre in Enum.GetValues(typeof(Genres)))
{
switch (genre)
{
case Genres.Classic_Rock:
//your code
break;
case Genres.Disco:
//your code
break;
default:
//your code
break;
}
}