如何最有效地查询 MethodInfo 需要多少个参数?

14

如何最有效地询问 MethodInfo 是否接受参数,如果是,则有多少个参数?

我的当前解决方案为:methodInfo.GetParameters().Any()methodInfo.GetParameters().Count()

这是否是最有效的方法?

由于我实际上不需要任何 ParameterInfo 对象,是否有一种方法可以在不调用 GetParameters() 的情况下完成此操作?

3个回答

18
你列出的两个方法是用于LINQ的。 Any() 返回bool,表示至少有一个。 Count() 用于IEnumerable<T>Length(属性)将是最快的,因为GetParameters()返回ParameterInfo[]
似乎MethodInfo没有其他获取参数数量的方法,除了使用GetParameters()

你是否熟悉MethodImplAttributes,或者你知道它们是否可以用来确定这个问题吗? - smartcaveman
我个人不是。看起来似乎不适用。 - Daniel A. White
@smartcaveman:“MethodImplAttributes”指定了方法实现细节。正如丹尼尔所正确地假设的那样,它与方法参数的数量无关。 - Jaroslav Jandek

5
如果效率很重要,为什么不将结果缓存到Dictionary<MethodInfo,int>中呢?这样你只需要使用一次反射。

1

如果您想获取MethodInfo的参数计数,则使用以下代码

int intLength = mi.GetParameters().Length; // where mi is a variable of type MethodInfo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接