PropertyInfo.SetValue对象与目标类型不匹配

本文关键字:类型 不匹配 目标 SetValue 对象 PropertyInfo | 更新日期: 2023-09-27 18:21:45

我有一个类似的错误,但不幸的是,不是同一个简单的解决方案。这是代码:

public virtual void MapObject(T obj, IViewModel<T> viewModel, ITPSDataAccess dataAccess)
{
    var objProps = obj.GetType().GetProperties();
    var dtoProps = viewModel.GetType().GetProperties();
    foreach (var dtoProp in dtoProps)
    {
        var objProp = dtoProps.SingleOrDefault(x => x.Name == dtoProp.Name);
        if (objProp != null)
        {
            var dtoVal = dtoProp.GetValue(viewModel, null);
            objProp.SetValue(obj, dtoVal, null); // ERROR HERE
        }
    }
     ...
}

错误发生在所指示的点,指出"对象与目标类型不匹配"。看起来我正在传递要设置的正确对象——因此我无法解决问题。

我还尝试了接受这个解决方案的建议,并检查了我试图设置的引发异常的属性类型——有问题的属性是一个字符串,setter似乎没有被破坏,因为它在正常的、非反射的情况下工作。

PropertyInfo.SetValue对象与目标类型不匹配

错误似乎就在这里:

var objProp = dtoProps.SingleOrDefault(x => x.Name == dtoProp.Name);

我想你的意思是:

var objProp = objProps.SingleOrDefault(x => x.Name == dtoProp.Name);