使用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版本: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!");
}