问题标签 [methodinfo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2016 浏览

c# - 获取表达式树中方法的表达式

我想在表达式树中创建以下查询:

我如何创建表达式:

我尝试了一切,我什至被困在为 Expression.Call 方法获取 Field 的 MethodInfo 上。Field 是 DataRowExtentions 的一个扩展方法。

我必须为此使用 Expression.Call() 吗?我如何获得 MethodInfo?有更简单的方法吗?

我试过 :

ParameterExpression dataRow = Expression.Parameter(typeof(DataRowExtensions), "dataRow"); 左表达式 = Expression.Call(dataRow, typeof(DataRowExtensions).GetMethod("Field"));

但它不起作用。


我想对 IQueryable tempResults 中的数据创建动态过滤器。

用户将选中 GUI 上的复选框,这些复选框将向 tempResults 中的数据添加“Where”表达式。当用户选择“列”时,我想显示 ColumnName =“列”的 DataRows。

这就是为什么我需要创建 where 表达式。但我非常坚持 MethodInfo 的事情。我也试过这个:

但它也不起作用。

还有其他方法吗?

0 投票
3 回答
1535 浏览

c# - 快速访问在 C# 中包含属性的类型/方法/...

我在这里创建了一个名为 AAtribute 的自定义属性,例如一个名为 B 的类,其中一个或多个方法使用该属性。是否有可能在不遍历整个程序集并查看所有已定义方法的属性的情况下获取将属性(在本例中为 BMethod1)作为其属性(其中一个)的方法的 MethodInfo?它们是其他 AttributeTargets(参数/类型/属性/...)的模拟方式吗?我不想要使用该类型属性的所有方法的数组,而只想要具有此 Attirbute-object 的方法。我想用它对方法施加额外的约束(返回类型、参数、名称、其他属性使用,...)。

0 投票
5 回答
2174 浏览

.net - 如何获取方法(.NET)中使用的字段?

在 .NET 中,使用反射如何获取方法中使用的类变量?

前任:

注意:GetClassVariablesInMethod(M1 MethodInfo) 返回 B 和 C 变量。我所说的变量是指该特定变量的值和/或类型和构造函数参数。

0 投票
2 回答
1351 浏览

c# - 将从接口类型获得的 MethodInfo 对象转换为 C# 中实现类型上的相应 MethodInfo 对象?

我的问题是:如果我有 MethodInfo 对象,对于从接口类型获得的方法,并且我也有实现此接口的类的 Type 对象,但它通过显式实现来实现所述方法,如何正确获取该类中实现方法的对应 MethodInfo 对象?

我需要这样做的原因是实现方法可以应用一些属性,我需要通过反射找到这些属性,但是需要找到这些属性的类只有实现类的对象引用,并且 Type接口的对象(+ 相应的 MethodInfo 对象)。

所以,假设我有以下程序:

运行它给了我:

在代码中有一个带有 ??? 的 .GetMethod 调用 评论。这部分是我需要帮助的。我需要在这里指定什么(我已经测试了很多,这让我想到了另一种方式)或者我需要用什么来替换这段代码。

由于我使用了接口中方法的显式实现,因此方法的实际名称不仅仅是“测试”。如果我使用以下代码转储类类型的 GetMethods() 数组的全部内容:

然后我得到这个:

很明显,名称前面有接口的全名及其命名空间。但是,由于重载,看起来我必须在类中找到所有此类实现方法(即假设有多个测试方法因参数而异),然后比较参数。

有没有更简单的方法?基本上,一旦我从接口获得方法的 MethodInfo 对象,我想通过获取其 MethodInfo 对象来找到实现此方法的类的确切方法。

请注意,我在这里处于一个循环的情况,所以如果我必须遍历类中的方法以从接口中找到确切的方法,那没关系,只要我有一个好的方法来识别我什么时候找到了正确的那一个。

我试图像这样改变上面的循环:

这没有打印出任何东西,所以很明显GetBaseDefinition,这样的方法并没有从接口指向 MethodInfo 对象。

任何指针?

0 投票
2 回答
8442 浏览

.net - 如何在非泛型 .NET 类型上获取泛型方法的 MethodInfo?

我有这个小问题,我无法弄清楚要传递给 Type.GetMethod 的参数,以便在非泛型类型上取回泛型方法的 MethodInfo。具体来说,我有这个类型定义:

我在 Type.GetMethod 上尝试了几次,但没有一个会返回 F 方法的 MethodInfo。

我知道我可以调用 Type.GetMethods 甚至 Type.FindMember,但我对 Type.GetMethod 很感兴趣。

有任何想法吗?

谢谢。

编辑

实际上,我的代码有点复杂。泛型方法被重载,所以我不能只使用函数名来使用 Type.GetMethod。我尝试了这些变体:

0 投票
4 回答
3408 浏览

c# - 异步运行时方法调用

我在运行时加载一些程序集并使用反射(MethodInfo.Invoke)在它们上调用方法。

现在我想让这些调用异步。所以我正在考虑使用 Delegate.BeginInvoke()。但我不确定如何通过在运行时提供函数名称来创建委托实例。(我看到的所有示例都在编译时解析了委托实例目标。)我有一个 MethodInfo 对象,其中包含要调用的方法。有没有办法做到这一点?

0 投票
3 回答
21746 浏览

c# - 如何测试 MethodInfo.ReturnType 是否为 System.Void 类型?

使用反射获取MethodInfo,我想测试返回的类型是否为typeof System.Void。

测试它是否是 System.Int32 工作正常

不编译?目前我正在测试名称的字符串表示是否为“System.Void”,这似乎非常错误。

0 投票
3 回答
378 浏览

.net - 如何确定显式实现的 MethodInfo 对象引用了哪个接口?

我有一个MethodInfo表示显式实现的接口方法的对象,如下所示。

如何查询此MethodInfo对象以获取它实现的接口类型,一个Type对象表示System.Collections.IEnumerable?该InterfaceMapping结构提供了逆操作,获取MethodInfo实现给定接口的类型的对象,因此这不起作用。

请注意,这是一个人为的示例,因为我可以清楚地解析此信息的方法名称。如果可能的话,我想避免这样做。

0 投票
2 回答
6027 浏览

c# - MethodInfo、CreateDelegate 和通用方法

感谢 Jon Skeet 在这个问题中的回答,我有以下工作:

当我尝试将相同的东西应用于具有不同返回类型和重载的方法时(这些是我能想到的唯一区别),我得到一个烦人的“ArgumentException:错误绑定到目标方法”。打电话给CreateDelegate. 下面是一个得到错误的工作示例,只需复制/粘贴到控制台应用程序中。

如上所述,我能看到的唯一区别是:

  1. 不同的返回类型(T有效,IEnumerable<T>无效)[编辑:这是不对的,第一个版本使用BaseItem,不是T;哎呀]
  2. 重载(GetItem没有重载,GetList有几个;我只需要GetList()没有参数的委托

Update1: ​​Sam 帮我查明了一些问题。如果委托的返回类型是通用的(例如IEnumerable<BaseItem>),当我尝试交换基类/派生类型时,它会令人窒息。有什么方法可以GetList像下面这样声明我的方法吗?我需要能够表明T继承自BaseItem,但如果可以的话,它对我来说很好。

另一种选择是“通用化”我的委托声明。我能找到的所有示例都使用泛型作为参数,而不是返回类型。我该怎么做(它会引发编译器错误,原因T是未定义,它不会让我使用where约束):

0 投票
1 回答
220 浏览

c# - 在 int 上检索 MethodInfo

*是否可以在 Int32 上检索 MethodInfo运算符?

我试过这段代码但没有成功(它返回null):

谢谢!