【问题标题】:Invoke a method using a string from Console.Readline使用 Console.Readline 中的字符串调用方法
【发布时间】:2011-01-14 05:00:33
【问题描述】:

我有什么都不做的源代码。

if (tok[1] == "?")
{
    Type _t = typeof(Help);
    Help _h = new Help();
    MethodInfo[] _m = _t.GetMethods();
    foreach (MethodInfo m in _m)
    {
        if (m.Name.CompareTo(tok[0]) == 0)
        {
            m.Invoke(_h, null);
        }
    }
}

当用户键入命令时,它应该从与 if 语句不同的类调用静态方法?进入控制台。标记器有效,方法是公开的,这是我正在使用的代码。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 你的问题到底是什么?
  • 您是否尝试过单步执行代码?它在哪里没有达到您的预期?

标签: c# string class methods


【解决方案1】:

如果你想找到静态方法,你必须添加一个 BindingFlagsEnum。

MethodInfo[] _m = _t.GetMethods(BindingFlags.Static|BindingFlags.Public );

【讨论】:

  • 您可能需要在调用之前检查 (m.GetParameters().Length == 0)。
【解决方案2】:

改用GetMethod

typeof(Help).GetMethod(tok[0]).Invoke(null,null);

由于方法是**static**,所以第一个参数需要传入null

【讨论】:

  • 如果您这样做,请检查 GetMethod(tok[0]) 的返回是否为空。
  • 仍然什么都不做。当它没有抛出异常、错误或任何东西时,我如何找出问题所在?我正在使用 c# express 2010。
  • 发布帮助类的声明。
猜你喜欢
  • 1970-01-01
  • 2012-03-01
  • 2012-06-22
  • 2013-09-16
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
相关资源
最近更新 更多