如果我们尝试Enum.Parse<T>使用字符串整数 ( "2", "3", "55", ...)调用,即使 Enum 没有定义解析值,解析也会成功。
这是示例代码
public static class Program
{
enum TestEnum
{
A = 0,
B = 1,
C = 2
}
public static void Main(string[] args)
{
TestEnum value = Enum.Parse<TestEnum>("4");
Console.WriteLine(value); // outputs 4 to console
bool result = Enum.TryParse<TestEnum>("4", out _);
Console.WriteLine(result); // writes True
bool isDefined = Enum.IsDefined(typeof(TestEnum), "4");
Console.WriteLine(isDefined); // writes False
}
}
Run Code Online (Sandbox Code Playgroud)
这种行为在我看来是出乎意料的。我们在我们的应用程序中发现了一个错误,因为我们使用Enum.TryParse了Enum.IsDefined.
.net 核心版本:
>dotnet --list-sdks
2.2.110 [C:\Program …Run Code Online (Sandbox Code Playgroud)