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
,此代码可能无法编译。但向后兼容性很重要,所以如果他们没有很好的理由不改变现有行为,我有点理解。
我们在日志中发现了一个异常,我们不清楚这段代码如何有效,有人能解释一下为什么这个代码片段会导致 运行 时间异常而不是编译-时间错误?
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
,此代码可能无法编译。但向后兼容性很重要,所以如果他们没有很好的理由不改变现有行为,我有点理解。