C# Check是枚举中的输入

C# Check是枚举中的输入,c#,enums,C#,Enums,我不知道为什么这么难不 我必须检查Enum中的用户输入 现在我有两个不同的方法,它们告诉(False或True)是在枚举中输入的。我不想向用户展示这些东西,我只想让程序像这样打印: 在名为“奥迪”的汽车制造商列表中找到您的输入“此处的用户输入” 您可以使用Enum.GetNames函数,然后解析名称以获取int值 foreach (var merkkiluettelo in Enum.GetNames(typeof(Automerkit))) { Enum.TryParse(merkki

我不知道为什么这么难不

我必须检查Enum中的用户输入

现在我有两个不同的方法,它们告诉(False或True)是在枚举中输入的。我不想向用户展示这些东西,我只想让程序像这样打印:

在名为“奥迪”的汽车制造商列表中找到您的输入“此处的用户输入”


您可以使用
Enum.GetNames
函数,然后解析名称以获取
int

foreach (var merkkiluettelo in Enum.GetNames(typeof(Automerkit)))
{
    Enum.TryParse(merkkiluettelo, out Automerkit a);
    Console.WriteLine($"{(int)a} = {merkkiluettelo}");
}
您可以使用该方法获取与其基础值关联的枚举值的名称(还有其他方法,请参阅)。您只需要一个
foreach
循环,并且可以使用字符串插值以
value=name
格式打印:

foreach (int rawValue in Enum.GetValues(typeof(Automerkit))) {
    WriteLine($"{rawValue} = {Enum.GetName(typeof(Automerkit), rawValue)}");
}

当转换为字符串时,枚举值会自动转换为枚举名称。因此,您可以编写

foreach (Automerkit enumValue in Enum.GetValues(typeof(Automerkit))) {
    WriteLine($"{(int)enumValue} = {enumValue}");
}
注意,foreach语句自动将元素类型(
GetValues
返回的
object
转换为迭代变量的类型(
Automerkit


有关详细信息,请参阅的部分。
WriteLine的参数使用(Microsoft文档)。

您可以使用
Enum.GetName(typeof(Automerkit),luku)
获取枚举值的名称。
GetValues
返回传入而不是对象的类型的
System.Array
,因此不会转换。@snr,否。尝试使用
foreach(enum.GetValues中的var enumValue(typeof(Automerkit))){…
使用
var
时,您将看到
enumValue
将被推断为
object
(请注意,代码仍然使用
var
,因此不需要将对象转换为enum类型,而是更好地反映了程序员的意图)。注意,即使数组是
Automerkit[]
,它返回为
System.Array
。因此,如果要将对象显式键入为
Automerkit
,则必须强制转换整个数组或其元素。先生,首先,感谢您的努力和良好的解释,但是
Enum.GetValues(typeof(Automerkit))
返回类型
Automerkit[]
enumValue
的类型为
object
。您的意思是该类型被隐式转换为
Automerkit
类型吗?(object->Automerkit)。您介意看一下吗?请参阅的定义。它返回一个。索引器返回一个
对象
。项的运行时类型是
Automerkit
,但编译时的静态类型是
对象
。要查看真实对象,必须强制转换它。
foreach (Automerkit enumValue in Enum.GetValues(typeof(Automerkit))) {
    WriteLine($"{(int)enumValue} = {enumValue}");
}