我有两个类似(不完全相同)的dll,其中一个实际上是另一个的一部分。我试图查看是否仍然存在兼容性(也就是说,如果较小的组件仍完全包含在较大的组件中)。

我通过遍历较小的dll中的所有类型并检查较大dll中的每个方法是否也存在(名称和参数列表)来进行此操作。

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

所以,我的问题是,如何确定MethodInfo对象存储的是属性还是真实的方法?

最佳答案

编译器将属性访问器标记为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;

关于c# - System.Reflection-如何确定MethodInfo对象是Method还是Property访问器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10910415/

10-13 06:08