C#反射循环通过方法并仅给出唯一的名称(忽略重载)

C# reflection loop through methods and give unique names only (ignoring overloaded)

我正在使用下面的方法循环访问类中的所有静态方法,但有许多重载方法。我只需要唯一的名称,例如,如果有3个名为"run()"的重载方法,那么我只希望在查询中返回1而不是3。现在我不在乎是否有重载方法。有没有一种方法可以在查询时而不是在查询后过滤这个?这个类有600多个静态方法(它是来自另一个库的DLL绑定),如果我可以限制前面的唯一名称,它将有助于加快加载速度。我基本上是取名字并用名字填充一个菜单。

methodinfo[]lemethods=typeof(mytype).getmethods(bindingFlags.public bindingFlags.static);


我不相信在GetMethods通话中有任何方法可以做到,但之后用Linq很容易做到:

1
2
3
4
5
var methodNames = typeof(MyType).GetMethods(BindingFlags.Public |
                                            BindingFlags.Static)
                                .Select(x => x.Name)
                                .Distinct()
                                .OrderBy(x => x);

请注意,我已经把排序放在了最后,所以没有什么可排序的——而且因为我们只得到了名称,所以我们只是执行自然排序。