转换枚举?诠释?使用反射时失败

1pgjy

使用int?转换成功
使用反射进行转换时失败。
如何使用反射将值成功分配enum?给属性int?

static void Main(string[] args)
{
    Dc dc = new Dc { Solution = Solution.Upgrade };

    Model model = new Model {  };

    //assign by reflection
    var psolution = model.GetType().GetProperty("Solution");
    //psolution.SetValue(model, dc.Solution); //this fail
    model.Solution = (int?)dc.Solution; //this success
    psolution.SetValue(model, Convert.ChangeType(dc.Solution, psolution.PropertyType)); //this fail
}

class Dc
{
    public Solution? Solution { get; set; }
}

class Model
{
    public int? Solution { get; set; }
}

enum Solution
{
    Upgrade = 1,
    Discard = 2,
}
维德曼塔斯(Vidmantas Blazevicius)

试试这个:

Type t = Nullable.GetUnderlyingType(psolution.PropertyType) ?? psolution.PropertyType;
object safeValue = (dc.Solution == null) ? null : Convert.ChangeType(dc.Solution, t);
property.SetValue(model, safeValue, null);

您需要获取的基础类型参数Nullable<T>才能设置的值int?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章