Enum.TryParse 运行-时间异常

Enum.TryParse Run-time exception

我们在日志中发现了一个异常,我们不清楚这段代码如何有效,有人能解释一下为什么这个代码片段会导致 运行 时间异常而不是编译-时间错误?

    string variant = "Variant";
    int result;
    Enum.TryParse(variant, out result);

Link 到 dotnetfiddle:https://dotnetfiddle.net/XWhkz3

提前致谢,

马塞尔!

您必须声明哪个 enumType 结果是。您不能将结果作为 int 类型用作 Enum.TryParse

上的输出变量
public enum ExampleEnum
{
    Variant
}
public class Program
{


        public static void Main()
        {
            string variant = "Variant";
            ExampleEnum result;
            Enum.TryParse(variant, out result);
        }

}

如果您查看 .Net 中 Enum.TryParse 的文档,您可以看到方法签名:

public static bool TryParse<TEnum> (string value, out TEnum result) where TEnum : struct;

即它只限于结构类型,而 int 满足该要求。文档还包含

ArgumentException

TEnum is not an enumeration type.

所以它按预期工作。

枚举约束是 added in c# 7.3,但看起来 Enum.TryParse 没有使用它。多年来,C# 和编译器都得到了改进,如果今天编写 TryParse,此代码可能无法编译。但向后兼容性很重要,所以如果他们没有很好的理由不改变现有行为,我有点理解。