我有两个相似(不完全相同)的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)