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

发布于 2025-01-05 04:53:01 字数 680 浏览 0 评论 0原文

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

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

使用反射,我已经在 AccessData 对象上识别了其中一个 DbSet 属性,如下所示...

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

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

鉴于我只有一个代表 DbSet 字段的 FieldInfo 对象,如何在 AccessData 对象上调用此特定 Field 的 Add 方法并传入一个对象?

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

accessData.<FieldInfoType>.Add(obj);

希望这是有道理的。

I have an instance of a class called AccessData, which inherits from DbContext. So it is an Entity Framework code first context class and looks like this...

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

Using Reflections, I have identified one of these DbSet properties on the AccessData object like this...

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

I now need to be able to add objects to this DbSet property.

Given that I only have a FieldInfo object that represents the DbSet field, how do I call the Add method of this particular Field on the AccessData object and pass in an object?

Or in other words how do I call the following?

accessData.<FieldInfoType>.Add(obj);

Hope this makes sense.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

像极了他 2025-01-12 04:53:01

获取字段的值:

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< /code> 关键字来简化最后 2 个步骤:

dynamic fldVal = listField.GetValue(accessData);
fldVal.Add(obj);

Get the field's value:

object fldVal = listField.GetValue(accessData);

Get the MethodInfo for the method you want to invoke:

MethodInfo addMethod = fldVal.GetType().GetMethod("Add", new Type[] { typeof(obj) });

And invoke it:

addMethod.Invoke(fldVal, new object[] { obj });

Or if you're using .NET 4, you may be able to use the new dynamic keyword to simplify the last 2 steps:

dynamic fldVal = listField.GetValue(accessData);
fldVal.Add(obj);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文