例如,让我们成为枚举并让我们循环遍历
enum Main_menu { NewGame, Options, AboutAuthor, Exit }
static void Main(string[] args)
{
int k = 0;
foreach (Main_menu item in Enum.GetValues(typeof(Main_menu)))
{
Console.Write($"{k} ");
Console.Write(item);
Console.WriteLine();
k++;
}
Console.ReadLine();
}
此枚举表示非常简单的类型菜单,在我处理的程序中,我不得不多次使用这种菜单,因此我更喜欢通过使用loop和使用快捷键Ctrl + Dot,我收到以下消息:
enum Main_menu { NewGame, Options, AboutAuthor, Exit }
static void Main(string[] args)
{
int k = 0;
k = LoopOverEnum(k);
Console.ReadLine();
}
private static int LoopOverEnum(int k)
{
foreach (Main_menu item in Enum.GetValues(typeof(Main_menu)))
{
Console.Write($"{k} ");
Console.Write(item);
Console.WriteLine();
k++;
}
return k;
}
}
现在,我想将枚举Main_menu添加为变量,因此,我将能够在每个定义的枚举上应用此循环,我尝试如下操作:
namespace ConsoleApp11
{
class Program
{
enum Main_menu { NewGame, Options, AboutAuthor, Exit }
static void Main(string[] args)
{
int k = 0;
k = LoopOverEnum(k, Main_menu);
Console.ReadLine();
}
private static int LoopOverEnum(int k, enum Main_menu)
{
foreach (Main_menu item in Enum.GetValues(typeof(Main_menu)))
{
Console.Write($"{k} ");
Console.Write(item);
Console.WriteLine();
k++;
}
return k;
}
}
}
但是该函数的代码完全变为红色,并带有不同的错误。问题是:
1)如果enum是变量,那么如何编写遍历enum的函数?
2)如何在枚举术语的定义中使用空格?
答案 0 :(得分:1)
k
不应是Main
中的局部变量。它应该是LoopOverEnum
中的局部变量。
有两种将类型传递给方法的方法。您尝试LoopOverEnum(int k, enum Main_menu)
是一个很好的尝试,但是很遗憾,它不是有效的C#。
您可以:
使用通用类型参数:
public static void LoopOverEnum<T>()
int k = 0;
foreach (T item in Enum.GetValues(typeof(T)))
{
Console.Write($"{k} ");
Console.Write(item);
Console.WriteLine();
k++;
}
}
// usage:
LoopOverEnum<Main_menu>()
使用类型为Type
的参数:
public static void LoopOverEnum(Type type)
int k = 0;
foreach (var item in Enum.GetValues(type))
{
Console.Write($"{k} ");
Console.Write(item);
Console.WriteLine();
k++;
}
}
// usage:
LoopOverEnum(typeof(Main_menu))
答案 1 :(得分:0)
这是遍历枚举的通用方法:
EXECUTE
答案 2 :(得分:0)
public static IEnumerable<T> GetValues<T>() => Enum.GetValues(typeof(T)).Cast<T>();
用法:
foreach (Main_menu item in GetValues<Main_menu>())
MessageBox.Show(item.ToString());
答案 3 :(得分:0)
遍历任何类型的枚举 枚举值中要有空格
您可以使用description属性,如下所示。您可以使用以下方法获取descriptionAttribute中提到的值。方法是通用的,因此可以与任何枚举一起使用。
using System.ComponentModel;
public enum MyEnum
{
[Description("value 1")]
Value1,
[Description("value 2")]
Value2,
[Description("value 3")]
Value3
}
public static string GetDescription<T>( T e)
{
if (e is Enum)
{
Type type = e.GetType();
Array values = System.Enum.GetValues(type);
foreach (int val in values)
{
if (val == e.ToInt32(CultureInfo.InvariantCulture))
{
var memInfo = type.GetMember(type.GetEnumName(val));
var descriptionAttribute = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault() as DescriptionAttribute;
if (descriptionAttribute != null)
{
return descriptionAttribute.Description;
}
}
}
}
return null; // could also return string.Empty
}