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

时间:2011-04-21 19:42:38

标签: c# reflection

我正在使用以下内容遍历类中的所有静态方法,但是有许多重载方法。我只想要唯一的名称,例如,如果有3个重载方法名为“Run()”,那么我只想在我的查询中返回1而不是3.现在我不在乎有重载方法。有没有办法可以在查询上过滤掉这个而不是之后?该类有600多个静态方法(它是来自DLL的另一个库的绑定),如果我可以预先限制唯一的名称,它应该有助于加快我的负载。我基本上拿着名字并用名字填充菜单。

MethodInfo [] leMethods = typeof(MyType).GetMethods(BindingFlags.Public | BindingFlags.Static);

1 个答案:

答案 0 :(得分:12)

我不相信在GetMethods调用中有任何办法,但事后很容易用LINQ做:

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

请注意,我已将排序放在最后,因此排序较少 - 而且因为我们只是获取了名称,所以我们只是执行自然排序。