【发布时间】:2012-01-30 03:57:19
【问题描述】:
我有一个与this one 类似的错误,但不幸的是不是同样简单的解决方案。代码如下:
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
}
}
...
}
错误发生在指示点,指出“对象与目标类型不匹配”。看起来我正在传递要设置的正确对象 - 因此我无法解决问题。
我还尝试接受this solution 的建议,并检查我尝试设置的引发异常的属性类型 - 有问题的属性是一个字符串,而 setter 似乎不是坏了,因为它在正常、非反射的情况下工作。
【问题讨论】:
-
将
objProp.PropertyType和dtoVal.GetType()添加到Watch 调试器窗口,并在调用objProp.SetValue(...)时设置断点。当断点被命中时,这两个表达式的计算结果是什么?它们必须相同。
标签: c# reflection