【发布时间】:2017-09-24 21:11:31
【问题描述】:
我想使用反射从对象中设置变量。
对于简单的对象,这是可行的。 (属性)
但是具有类变量(字段)的对象不起作用。在这里,我总是得到一个“对象与目标类型不一致”的异常。
这里有人知道它会怎么走吗?
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。)
标签: c# reflection properties field