我想使用反射來將KeyValuePair轉換爲對象的不同屬性。這些屬性可以是簡單類型或複雜類型。如果它們是「BaseClass的」類型的屬性我想要分配的編號和名稱:反射:設置基類型屬性
我的課表:
public class MyBaseClass {
public int Id { get;set;}
public string Name {get; set;}
}
public class Person:MyBaseClass {
public int Age {get;set;}
}
public class Item:MyBaseClass {
public decimal Price {get;set;}
}
public class TargetClass {
public Person Chief {get;set;}
public Item Product {get;set;}
}
現在我想使用反射來分配值:
foreach (var field in Fields) {
var target=targetType.GetProperty(field.Key);
if (field.Value.indexOf("|")>0) {
int id=int.Parse(field.Value.Split('|')[0]);
string name=field.Value.Split('|')[1];
var baseObj = new MyBaseClass { Id = id, Name=name };
target.SetValue(dest, baseObj);
} else {
target.SetValue(dest,field.Value);
}
}
所以如果該字段包含「|」我想在Id
和Title
中拆分該值,並將它們分配給目標類型。
Fields
是targetType
字典是typeof(TargetClass)
和dest
是TargetClass
一個對象。
所以,target
可能是物業Chief
和field["Chief"]
可能是"23|John Doe"
但是,當我嘗試的MyBaseClass
對象賦給屬性Chief
(或產品)我收到一個錯誤,從轉換MyBaseClass對首席失敗。但是爲了以通用的方式使用它,我確實想對MyBaseClass
派生的任何對象使用此方法。
而不是「新MyBaseClass {ID = ID,名字=名} ;」做「(MyBaseClass)Activator.CreateInstance(target.PropertyType)」 – Evk
這沒有工作。謝謝 –