我试图将值设置为许多对象中的属性。 我有一个接收2个参数MyStructuredObjects和MyObject的函数 MyStructuredObjects有一个MyObjects列表。 此功能是重新删除许多“如果”的工厂。
我想使用相同的对象,因为它在循环中使用它的功能。如果可能的话。 我遇到了例外情况'对象与目标'不匹配。 很抱歉发布了这个,但我没有发现像这样的问题,在对象结构中使用List。
看看:
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);
答案 0 :(得分:0)
我想我明白你要做的是什么。
您似乎正在尝试设置如下属性:
var o2 = new List<MyObject2>();
var mso = new MyStructuredObjects();
SetValuesToObjectsToIntegrate(ref mso, o2);
因为mso
的类型与属性类型匹配,Object2
将设置其属性o2
。
如果是这种情况,那么您只需要这段代码:
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);
接到这个电话后,我现在得到: