Reflectionを使用してオブジェクトから変数を設定したいとします。反射を使用してオブジェクトから変数を設定できない
単純なオブジェクトの場合、これは機能します。 (プロパティ)
しかし、クラス変数(フィールド)を持つオブジェクトは機能しません。ここで私は常に「オブジェクトはターゲットタイプに同意しません」という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;
}
}
は、なぜあなたはGetFieldの(Field.Name)) 'item.GetTypeを(呼び出している'だけでなく 'Field'を使用していますか? (私はまた、.NETの命名規則に従うことを強く勧めます。あなたのローカル変数は通常 'field'と' fieldProperty'です。) –