[英]SetValue Method throw Exception when using reflection
我正在尝试为许多对象的属性设置值。 我有一个函数,它接收2个参数MyStructuredObjects和MyObject MyStructuredObjects有一个MyObjects列表。 此函数是一个重构工厂,用于删除很多“ if”。
我想使用同一对象,因为它的功能是在循环中使用。如果可能的话。 我遇到过异常“对象与目标不匹配”。 很抱歉张贴此,但我没有发现这样的问题,使用对象结构内的列表。
看一看 :
public class MyStructuredObjects
{
public List<MyObject1> Object1 { get; set; }
public List<MyObject2> Object2 { get; set; }
public List<MyObject3> Object3 { get; set; }
public List<MyObject4> Object4 { get; set; }
public List<MyObject5> Object5 { get; set; }
}
private void SetValuesToObjectsToIntegrate<T>(ref MyStructuredObjects returnedObject, T obj)
{
Type t = obj.GetType();
var propertyInfo = new ObjectsToIntegrate().GetType().GetProperties();
var instance = Activator.CreateInstance(t);
foreach (var item in returnedObject.GetType().GetProperties())
{
var itemType = item.PropertyType;
if (t == itemType) // PASSING BY HERE OK , it finds the same type :P
{
item.SetValue(t, Convert.ChangeType(obj, item.PropertyType), null);
}
}
}
更新:代码应为:
item.SetValue(instance, Convert.ChangeType(obj, item.PropertyType), null);
我想我了解您正在尝试做的事情。
看来您正在尝试设置以下属性:
var o2 = new List<MyObject2>();
var mso = new MyStructuredObjects();
SetValuesToObjectsToIntegrate(ref mso, o2);
由于o2
的类型与属性类型匹配,因此该mso
将设置其属性Object2
。
如果是这样,那么您只需要以下代码:
private void SetValuesToObjectsToIntegrate<T>(MyStructuredObjects returnedObject, T obj)
{
foreach (var propertyInfo in typeof(MyStructuredObjects).GetProperties())
{
if (typeof(T) == propertyInfo.PropertyType)
{
propertyInfo.SetValue(returnedObject, obj, null);
}
}
}
有没有必要通过MyStructuredObjects returnedObject
由ref
为你不改变的情况下returnedObject
。
使用它来调用此代码:
var o2 = new List<MyObject2>();
var mso = new MyStructuredObjects();
SetValuesToObjectsToIntegrate(mso, o2);
打电话之后,我得到:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.