使用reflection,在已存在的对象上调用Field的方法
我有一个名为AccessData的类的实例,它inheritance自DbContext。 所以它是一个entity framework代码第一个上下文类,看起来像这样……
public class AccessData : DbContext { public DbSet apps_AppsList; public DbSet apps_AppsOldList; ... //Several other DbSet properties }
使用Reflections,我已经在AccessData对象上找到了这些DbSet属性之一,就像这样……
var listField = accessData.GetType().GetField(typeName + "List");
我现在需要能够向此DbSet属性添加对象。
鉴于我只有一个表示DbSet字段的FieldInfo对象,如何在AccessData对象上调用此特定Field的Add方法并传入一个对象?
或者换句话说,我该怎么称呼以下内容?
accessData..Add(obj);
希望这是有道理的。
获得该字段的值:
object fldVal = listField.GetValue(accessData);
获取要调用的方法的MethodInfo
:
MethodInfo addMethod = fldVal.GetType().GetMethod("Add", new Type[] { typeof(obj) });
并调用它:
addMethod.Invoke(fldVal, new object[] { obj });
或者,如果您使用的是.NET 4,则可以使用新的dynamic
关键字来简化最后两个步骤:
dynamic fldVal = listField.GetValue(accessData); fldVal.Add(obj);