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

时间:2016-08-05 05:33:06

标签: c# string enums tryparse

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

枚举:

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!");
}

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

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

3 个答案:

答案 0 :(得分:2)

使用支持忽略大小写的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!");
}

答案 1 :(得分:1)

是的!

使用允许您忽略大小写的the overload for Enum.TryParse

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

答案 2 :(得分:1)

任何.ToString的{​​{1}}值只返回您为其提供的名称。因此,如果您要在循环中执行此操作,我建议将所有名称添加到本地列表中并搜索可以提高性能的名称:

Enum