使用反射将整数赋值给C#可空枚举属性时遭遇类型转换异常的解决方案咨询
使用反射将整数赋值给C#可空枚举属性时遭遇类型转换异常的解决方案咨询
我最近在写C#代码时碰到了一个棘手的问题:当我通过反射操作一个可空枚举类型的属性,尝试把整数赋值给它的时候,直接抛出了类型转换的异常。
下面是我复现这个问题的完整代码:
using System; using System.Reflection; public enum MyEnum { Value1, Value2, } public class MyClass { public MyEnum? MyEnumValue { get; set; } } public class Program { public static void Main() { PropertyInfo enumProperty = typeof(MyClass).GetProperty("MyEnumValue"); MyClass myInstance = new(); enumProperty.SetValue(myInstance, 1); } }
运行这段代码后,我收到的错误信息如下:
System.ArgumentException: Object of type 'System.Int32' cannot be converted to type 'System.Nullable`1[MyEnum]'.
有意思的是,如果把MyEnumValue改成非可空的枚举类型,这段代码就能正常执行,但我的业务场景需要支持可空枚举,所以想请教各位,这种情况下该怎么正确地用反射把整数赋值给可空枚举属性呢?
备注:内容来源于stack exchange,提问作者Hugh
相关产品推荐
相关产品推荐

