리플렉션을 사용하여 개체의 변수를 설정하고 싶습니다.리플렉션을 사용하여 개체의 변수를 설정할 수 없습니다.
간단한 개체의 경우이 기능이 작동합니다. (속성)
그러나 클래스 변수 (필드)가있는 개체가 작동하지 않습니다. 여기서 나는 항상 "대상이 대상 유형과 일치하지 않습니다"라는 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'입니다.) –