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

本文关键字:TryParse- 字符串 枚举 问题 比较 使用 | 更新日期: 2023-09-27 18:00:14

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

枚举:

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

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

代码:

每次执行以下代码时,if语句都会返回false,因为"Easy" != "EASY"

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

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

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

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

使用支持忽略大小写的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.ToString值都只返回您为其提供的名称。因此,如果您要在循环中执行此操作,我建议将所有名称放到本地列表中,并在其中进行搜索,这样可以获得更好的性能:

string[] enumNames = Enum.GetNames(typeof(Difficulty));
bool found = enumNames.Any(x => x.Equals(header[i], StringComparison.OrdinalIgnoreCase));

是的!

使用Enum.TryParse的重载,它允许您忽略事例:

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