使用 TryParse 将字符串值与 C# 中枚举中的所有值进行比较 - 逻辑问题

Comparing a String value to ALL values in an Enum in C# using TryParse - Logic Issue

我正在尝试确定是否在我的代码中的枚举中找到从文件读入的字符串值。

枚举:

internal enum Difficulty { None, Easy, Medium, Hard }

此时在我的代码中header[i] = "EASY"。 我想将此值与我的 Difficulty 枚举中找到的任何值进行比较,但遇到了问题。

代码:

每次执行下面的代码,if语句returns false 因为"Easy" != "EASY".

Difficulty dif = Difficulty.None;
if (Difficulty.TryParse(header[i], out dif)) {      // RETURNS FALSE
    MyLog.Write("It's in the Enum!");
}

我尝试将 header[i] 值与 TryParse 语句中的 Difficulty 值进行比较,但它会导致编译器错误。

除了将所有 Difficulty 值更改为大写外,我还能做些什么吗?

是的!

使用 the overload for Enum.TryParse 可以忽略大小写:

if (Enum.TryParse("EASY", true, out dif))
{      
    Console.WriteLine("It's in the Enum!");
}

使用支持忽略大小写的 TryParse 版本:https://msdn.microsoft.com/en-us/library/dd991317(v=vs.110).aspx

您的代码变为:

Difficulty dif = Difficulty.None;
if (Enum.TryParse<Difficulty>(header[i], true, out dif))
{      
    MyLog.Write("It's in the Enum!");
}

任何 Enum returns 的 .ToString 值只是您为其提供的名称。因此,如果您要在循环中执行此操作,我建议将所有名称获取到本地列表并在其中进行搜索,这会带来更好的性能:

string[] enumNames = Enum.GetNames(typeof(Difficulty));

bool found = enumNames.Any(x => x.Equals(header[i], StringComparison.OrdinalIgnoreCase));