我想使用反射設置對象的變量。使用反射設置變量對象不起作用
對於簡單的對象,這可以工作。 (屬性)
但具有類變量(字段)的對象不起作用。在這裏,我總是得到一個「對象不符合目標類型」的Exeption。
有沒有人在這裏有一個想法如何去?
class Program
{
static void Main(string[] args)
{
var genericDataSet = new GenericDataSet<DataObjekt>();
var returnObjekt = genericDataSet.KeepElementsData();
}
}
public class DataObjekt
{
public string Name { get; set; }
public ObjektData ModelTyp;
public DataObjekt() { ModelTyp = new ObjektData(); }
}
public class ObjektData
{
public string Typ { get; set; }
public string Data { get; set; }
}
public class GenericDataSet<T> where T : class, new()
{
public T KeepElementsData()
{
var item = new T();
//Propertys durchlaufen
foreach (var Property in item.GetType().GetProperties())
{
item.GetType().GetProperty(Property.Name).SetValue(item, "TestData"); //this works
}
//Fields durchlaufen
foreach (var Field in item.GetType().GetFields())
{
foreach (var FieldProperty in item.GetType().GetField(Field.Name).FieldType.GetProperties())
{
var data = item.GetType().GetField(Field.Name).FieldType.GetProperty(FieldProperty.Name);
data.SetValue(item, "TestData not work", null); // this doesent work
}
}
return item;
}
}
你爲什麼要叫'item.GetType()getfield命令(Field.Name)',而不是僅僅使用'Field'? (我也敦促你開始遵循.NET命名約定 - 你的本地變量通常是'field'和'fieldProperty'。) –