c# - 获取具有给定返回类型的所有方法

标签 c# .net reflection

这段代码有错吗?它只是没有返回任何东西:

public IEnumerable<string> GetMethodsOfReturnType(Type cls, Type ret)
{
   var methods = cls.GetMethods(BindingFlags.NonPublic);
   var retMethods = methods.Where(m => m.ReturnType.IsSubclassOf(ret))
                           .Select(m => m.Name);
   return retMethods;
}

它返回一个空的枚举器。

注意:我在寻找 ActionResults 的 ASP.NET MVC Controller 上调用它

GetMethodsOfReturnType(typeof(ProductsController), typeof(ActionResult));

最佳答案

其他人指出了修复方法,但我想建议 IsSubclassOf 的替代方法并包括公共(public)方法:

public IEnumerable<string> GetMethodsOfReturnType(Type cls, Type ret)
{
   // Did you really mean to prohibit public methods? I assume not
   var methods = cls.GetMethods(BindingFlags.NonPublic | 
                                BindingFlags.Public |
                                BindingFlags.Instance);
   var retMethods = methods.Where(m => m.ReturnType.IsAssignableFrom(ret))
                           .Select(m => m.Name);
   return retMethods;
}

IsAssignableFrom ,您不需要进行额外的“返回类型是否与所需类型完全相同”测试,并且它也适用于接口(interface)。

关于c# - 获取具有给定返回类型的所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2693025/

相关文章:

c# - 比较两个 FieldInfo 实例的最可靠方法是什么?

java - 将 Jsoup 与 Java 反射结合使用

c# - 传递给委托(delegate)时作为引用类型处理的整数

c# - 停止计算机输出显示

.net - 第一个 linq 的第一个问题

c# - 使用反射创建命名空间中所有类的列表并转换为其真实类型

c# - 为我的应用程序制作帮助文件

c# - 对对象实现更改跟踪的最佳方法是什么

c# - 什么样的功能适合内存?

c# - 将 VB.NET 转换为 C# 时出现问题