c# - System.Reflection - 如何判断 MethodInfo 对象是方法访问​​器还是属性访问器?

标签 c# reflection

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

相关文章:

c# - 如何在另一台计算机上运行包含本地 SQL Server 数据库的 C# 应用程序?

c# - 是否可以扩展 DataColumn.Expression

c# - 用于使用 .NET Core 的多个框架的编译器指令

scala - 如何在 Scala 中使用反射获取所有(非最终)对象 val 和子对象 val?

.net - 使用反射将字符串转换为 Nullable<T>

c# - C# 对字符串列表排序的空间复杂度

c# - 为什么 WebBrowser DocumentCompleted 仅在加载所有图像时触发?

reflection - 如何使用反射提取接口(interface)类型名称和包?

c# - 为元组创建泛型

c# - Web 服务 - 方法命名?