这段代码有错吗?它只是没有返回任何东西:
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/