有没有办法确定参数是否具有此修饰符?

时间:2014-05-23 13:22:48

标签: c# reflection extension-methods

我想确定一个参数是否有使用this的{​​{1}}修饰符。我查看了Reflection类的属性,但找不到任何有用的东西。我知道扩展方法只是语法糖,但我相信应该有一种方法来确定方法是否是一种扩展方法。

将扩展方法与其他静态方法(在静态 public 类中定义)区别开来的唯一方法是ParameterInfo修饰符。

例如,这不是扩展方法:

this

但这是:

public static int Square(int x) { return x * x; }

那么如果可能的话,如何使用public static int Square(this int x) { return x * x; } 或其他方法来区分两种方法?

1 个答案:

答案 0 :(得分:7)

完全相同,但您可以检查该方法是否已应用ExtensionAttribute

var method = type.GetMethod("Square");
if (method.IsDefined(typeof(ExtensionAttribute), false))
{
    // Yup, it's an extension method
}

现在我说它不完全一样,因为你可以写了:

[Extension]
public static int Square(int x) { return x * x; }

...编译器仍会将其作为扩展方法进行选择。所以这个 检测它是否是一个扩展方法(假设它是静态顶级非泛型类型),但不是 检测源代码是否在第一个参数上有this修饰符。