[英]C# Treat an enum as an array
在我的项目中,我有一个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;
.....
.......
}
}
我想做的事情将switch
盒中的enum
像一个数组一样对待。
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中。
除非您进行一些调整,否则我认为这实际上是不可能的...例如,使用静态数组存储所有值:
public static readonly Genres[] AllGenres = Enum.GetValues(typeof(Genres)).Cast<Genres>().ToArray();
// sample:
public void test()
{
var first = AllGenres [0];
}
编辑
现在我明白了您的需求。 您实际上希望将列表绑定到控件。 我认为,如果您认为只需要一个描述,就应该尝试对枚举使用use属性,然后编写一个通用方法来检索枚举项并将其包装为一个对象,例如:
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...
您可以进一步调整它以满足您的需求(例如,使用类型约束使它更好)-更重要的是,它将成为服务所有枚举类型的泛型类...
根据您的编辑,看起来像您想要的
foreach(var genre in Enum.GetNames(typeof(Genres)))
{
listBox.Items.Add(genre.ToUpperInvariant());
}
您正在尝试这样做吗?
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.