我可以得到MethodInfo
如下String.Trim
,没关系,但得到的方法信息没有字符串参数!可以吗?
typeof(string).GetMethod("Trim", new Type[ ] {});
以下代码返回null,为什么?
typeof(string).GetMethod("Trim", BindingFlags.Public);
我们如何使用(调用)Trim
方法信息?
我可以得到MethodInfo
如下String.Trim
,没关系,但得到的方法信息没有字符串参数!可以吗?
typeof(string).GetMethod("Trim", new Type[ ] {});
以下代码返回null,为什么?
typeof(string).GetMethod("Trim", BindingFlags.Public);
我们如何使用(调用)Trim
方法信息?
当你这样做时typeof(string).GetMethod("Trim", new Type[ ] {});
,你要求检索不带任何参数的方法的重载。这就是为什么输出中没有显示参数的原因。相反,如果您这样做typeof(string).GetMethod("Trim", new Type[ ] {typeof(char[])});
,它将返回相应的重载。
关于第二个问题,您可以通过设置指示实例方法的标志来克服这个问题,即BindingFlags.Public|BindingFlags.Instance
。但是,这只会将错误更改为模棱两可的匹配问题。我建议你也传递参数类型列表来克服这个问题。
由于在您的第一个示例中,您特别要求一个没有参数的方法,因此您得到了没有任何参数的重载。
如果你想要带参数的重载,你需要这样说:
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
or BindingFlags.Static
,因此(如文档所述)方法返回null
。指定一个或另一个(BindingFlags.Instance
对于Trim()
方法)以获得有效的返回值(假设只有一个方法匹配......在这种情况下,有多个,所以你会得到一个错误)。