gpt4 book ai didi

c# - 获取同名方法的集合

转载 作者:太空狗 更新时间:2023-10-29 20:20:54 26 4
gpt4 key购买 nike

我有一些代码(用于帮助进行 url 路由)试图在 Controller 中找到操作方法。

我的 Controller 看起来像这样:

public ActionResult Item(int id)
{
MyViewModel model = new MyViewModel(id);
return View(model);
}

[HttpPost]
public ActionResult Item(MyViewModel model)
{
//do other stuff here
return View(model);
}

下面的代码试图找到一个匹配 url Action 的方法:

//cont is a System.Type object representing the controller
MethodInfo actionMethod = cont.GetMethod(action);

今天这段代码抛出一个 System.Reflection.AmbiguousMatchException: Ambiguous match found 鉴于我的两个方法具有相同的名称,这很有意义。

我查看了 Type 对象的可用方法,发现 public MethodInfo[] GetMethods(); 似乎可以做我想做的,除了没有' 似乎是搜索具有特定名称的方法的重载。

我可以只使用这个方法并搜索它返回的所有内容,但我想知道是否有另一种(更简单的)方法来获取类中具有特定名称的所有方法的列表,当有多个时。

最佳答案

搜索 GetMethods 的结果确实没有错,但如果你真的想这样做,你可以这样做:

var flags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;

var myOverloads = typeof(MyClass)
.GetMember("OverloadedMethodName", MemberTypes.Method, flags)
.Cast<MethodInfo>();

...使用this method .您可能需要根据您的要求更改绑定(bind)标志。

我检查了引用源,发现这在内部依赖于以成员名称为键的缓存多图(请参阅 RuntimeType.GetMemberList),因此它应该比在客户端代码中搜索更有效每次。

你也可以这样做(更方便但效率稍低,至少在理论上是这样):

var myOverloads = typeof(MyClass).GetMember("OverloadedMethodName")
.OfType<MethodInfo>();

关于c# - 获取同名方法的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16815276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com