Enum<T>.Parse 允许解析任何整数字符串。它是 .net 核心中的错误吗?

mil*_*lan 2 c# .net-core

如果我们尝试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.TryParseEnum.IsDefined.

.net 核心版本:

>dotnet --list-sdks
2.2.110 [C:\Program Files\dotnet\sdk]
2.2.207 [C:\Program Files\dotnet\sdk]
3.1.101 [C:\Program Files\dotnet\sdk]
Run Code Online (Sandbox Code Playgroud)

此输出来自使用 VS2017 以调试模式运行的控制台(这意味着应用程序可能在 2.2.110 运行时下运行)。

这是 .net 核心中的错误吗?我试图在 .net core github repo 上找到错误报告,但没有运气。

Ren*_*ogt 9

文档

如果value是不表示TEnum枚举基础值的整数的字符串表示形式,则该方法返回一个枚举成员,其基础值已value转换为整数类型。如果此行为不受欢迎,请调用该IsDefined方法以确保整数的特定字符串表示实际上是 的成员TEnum

因此,这不是错误,而是有意并记录在案的行为。