gpt4 book ai didi

c# - 为什么动态转换会抛出异常?

转载 作者:行者123 更新时间:2023-11-30 21:00:10 24 4
gpt4 key购买 nike

我有一个枚举:

enum MyEnum
{
First,
Second
}

我可以将 int 转换为 Enum:

var sample1 = (MyEnum)1;

但是我在动态转换时遇到了异常:

var sample2 = System.Convert.ChangeType(1, typeof(MyEnum));
//Invalid cast from 'System.Int32' to 'ConsoleApplication1.Program+MyEnum'.

为什么动态转换会抛出异常?

我不是在寻找解决方案,只是想知道为什么抛出异常?

谢谢

最佳答案

简答:Convert.ChangeType 只能将内置类型转换为一组预定义的类。在 Int32 的情况下,这是 IConvertible 允许的同一组显式类.

长答案:在幕后,Convert.ChangeType 方法将调用 Int32.IConvertible.ToType .

这将依次调用内部方法 Convert.DefaultToType,该方法将处理预定义的类型列表并从 IConvertible 调用适当的方法(例如,如果您请求 DateTime,它将调用ToDateTime)。但是,从您的角度来看,其中有一个有趣的地方:

if (targetType == Convert.EnumType)
{
return (Enum)value;
}

您可能认为这会让您的代码正常工作。但是,它不会 - 您的枚举类型不是 System.Enum - 它是它的一个子类。

关于c# - 为什么动态转换会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com