【问题标题】:how to prevent getmethods from retrieve a specific method如何防止getmethods检索特定方法
【发布时间】:2016-03-10 10:55:08
【问题描述】:

我有一个带有私有函数的静态类,我想获取除一个之外的所有函数。我尝试使用 Ignorecase,但出现重载异常...我的做法与网上的许多示例完全一样,但出现错误,我不知道为什么...我错过了什么吗?

//示例

static MethodInfo[] allFuncs ;
static Type myType = typeof(myClass);        
allFuncs = myType.GetMethods("innerFunction", 
                BindingFlags.IgnoreCase | BindingFlags.NonPublic | BindingFlags.Static);

【问题讨论】:

  • 你如何过滤掉你不想要的过载?
  • 使用绑定标志 - 我想要私有和静态没有方法:innerFunction
  • 您想要除innerFunction 之外的所有privatestatic 方法?

标签: c# reflection


【解决方案1】:

如果您想要除具有特定名称的方法之外的所有方法,您可以使用Enumerable.Where 进行过滤:

allFuncs = typeof(MyClass).GetMethods(BindingFlags.NonPublic | BindingFlags.Static)
                          .Where(method => !method.Name.Equals(
                                    "innerFunction", StringComparison.OrdinalIgnoreCase));

【讨论】:

  • 我会试试的,但为什么我的选项不起作用?有什么问题?
  • @Damkulul 问题是你没有正确使用Type.GetMethod(注意你的回答说你正在使用GetMethods,尽管它接受string并没有过载)。您正在使用的重载试图找到名为 innerFunction 的特定方法,这与您想要的完全相反。
  • @Damkulul 我删除了它。它是 LINQPad 的一部分。
猜你喜欢
  • 2017-12-22
  • 1970-01-01
  • 2014-01-07
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2013-08-17
相关资源
最近更新 更多