gpt4 book ai didi

c# - 使用反射,在已经存在的对象上调用 Field 的方法

转载 作者:太空狗 更新时间:2023-10-29 22:53:44 24 4
gpt4 key购买 nike

我有一个名为 AccessData 的类的实例,它继承自 DbContext。所以它是一个 Entity Framework 代码优先上下文类,看起来像这样......

public class AccessData : DbContext
{
public DbSet<apps_Apps> apps_AppsList;
public DbSet<apps_AppsOld> apps_AppsOldList;
...
//Several other DbSet<> properties
}

使用 Reflections,我已经在 AccessData 对象上识别了这些 DbSet 属性之一......

var listField = accessData.GetType().GetField(typeName + "List");

我现在需要能够将对象添加到此 DbSet 属性。

如果我只有一个表示 DbSet 字段的 FieldInfo 对象,我如何在 AccessData 对象上调用这个特定字段的 Add 方法并传入一个对象?

或者换句话说,我该如何调用以下内容?

accessData.<FieldInfoType>.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);

关于c# - 使用反射,在已经存在的对象上调用 Field 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com