我想确定一个参数是否有使用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; }
或其他方法来区分两种方法?
答案 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
修饰符。