我遇到了一个类似于这个的错误,但不幸的是没有同样简单的解决方案。这里是代码:
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似乎没有问题,因为在正常的非反射情况下工作。
objProp.PropertyType
和dtoVal.GetType()
添加到 Watch 调试器窗口,并在调用objProp.SetValue(...)
处设置断点。当断点被触发时,这两个表达式的求值结果是什么?它们需要相同。 - Michael Liu