System.Reflection - 如何判断MethodInfo对象是Method还是Property访问器?

nes*_*oop 5 c# reflection

我有两个相似(不完全相同)的dll,其中一个实际上是另一个的一部分.我试图看看是否仍然存在兼容性(即,如果较小的仍然完全包含在较大的内容中).

我这样做是通过迭代较小的dll中的所有类型并检查它们中的每个方法是否也存在(名称和参数列表)在较大的dll中.

问题是Assembly.GetMethods()返回方法和属性getter/setter,我猜,是的,是一种方法,但在这种情况下这对我不利.

所以,我的问题是,如何判断MethodInfo对象是存储属性还是实际方法?

Bot*_*000 11

属性访问specialname器由编译器标记.你可以检查一下MethodBase.IsSpecialName,你可以检查你的MethodInfo对象.对于其他特殊方法(例如运算符重载),此属性也适用.

排除属性getter和setter的另一种可能性是这个查询:

from m in typeof(SomeType).GetMethods()
where !typeof(SomeType).GetProperties().Any(p => p.GetGetMethod() == m || p.GetSetMethod() == m)
select m;
Run Code Online (Sandbox Code Playgroud)