【发布时间】:2016-01-31 17:59:10
【问题描述】:
C# .NET 4.5,Windows 10,我有以下枚举:
private enum Enums
{
A=1, B=2, C=3
}
而且这个程序的行为方式非常奇怪:
public static void Main()
{
Enums e;
if (Enum.TryParse("12", out e))
{
Console.WriteLine("Parsed {0}", e);
}
else
{
Console.Write("Not parsed");
}
Console.ReadLine();
}
我希望 TryParse 方法的结果是错误的,但令我惊讶的是 控制台显示“Parsed 12”。 在 Watch 窗口中,它甚至显示值为“12”并且它是 Enums 类型!
这适用于我尝试过的任何数字字符串(例如“540”),但不适用于包含字母的字符串(“A12”、“12A”)。
我可以通过首先检查它是否是纯数字字符串来轻松克服这个问题,但为什么会出现这种情况? 是设计的吗?
谢谢! 伊多
【问题讨论】:
-
是的,这是设计使然。如果一个值上的
.ToString()可以返回一个特定的字符串,并且所讨论的类型有一个.Parse()方法,那么解析方法应该接受该字符串作为返回,这是一个好主意。由于枚举可以保存“未知”值(即枚举中没有名称的值),并且.ToString()会将这些值作为字符串中的数字返回,因此.Parse()应该接受一个字符串保存只有一个整数。所以是的,这是设计使然。您可能不同意这个决定,但事实就是如此。