Get MethodInfo of String.Trim with reflection?



我可以得到MethodInfo String.Trim如下,没关系,但得到的方法信息没有字符串参数!可以吗?

typeof(string).GetMethod("Trim", new Type[ ] {});

以下代码返回 null,为什么?

typeof(string).GetMethod("Trim", BindingFlags.Public);

我们如何使用(调用(Trim方法信息?

由于在第一个示例中,您专门要求使用没有参数的方法,因此会得到没有任何参数的重载。

如果你想要参数重载,你需要这样说:

typeof(string).GetMethod("Trim", new [] { typeof(char[]) });

要通过 MethodInfo 调用实例方法,您需要将实例引用传递给 Invoke() 方法:

// Parameterless overload
methodInfo.Invoke(myStringInstance, null);
// Single-parameter overload
methodInfo.Invoke(myStringInstance, new [] { new [] { ' ', 'r', 'n' } });

在第二个示例中,您既未指定 BindingFlags.Instance 也未指定 BindingFlags.Static ,因此(如文档所示(该方法返回null 。指定一个或另一个(Trim()方法的BindingFlags.Instance(以获取有效的返回值(假设只有一个方法匹配...在这种情况下,有多个,因此您会收到错误(。

当你做typeof(string).GetMethod("Trim", new Type[ ] {});时,你要求检索不带任何参数的方法的重载。这就是为什么输出中没有显示参数的原因。相反,如果你这样做typeof(string).GetMethod("Trim", new Type[ ] {typeof(char[])});,它将返回相应的重载。

关于第二个问题,您可以通过设置指示实例方法的标志来克服此问题,即 BindingFlags.Public|BindingFlags.Instance .但是,这只会将错误更改为模棱两可的匹配问题。我建议您也传入参数类型列表以克服这个问题。

相关内容

  • 没有找到相关文章

最新更新