我有两个相似(不完全相同)的 dll,其中一个实际上是另一个的一部分。我正在尝试查看是否仍然存在兼容性(也就是说,较小的是否仍然完全包含在较大的中)。
我通过遍历较小的 dll 中的所有类型并检查它们中的每个方法是否也存在于较大的 dll 中(名称和参数列表)来做到这一点。
问题是 Assembly.GetMethods() 返回方法和属性 getter/setter,我想,是的,这是一种方法,但在这种情况下这对我不利。
所以,我的问题是,如何判断 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 对象是方法访问器还是属性访问器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10910415/