You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#动态调用可接受null的字符串参数方法问题求助

修复反射调用接受string?参数的方法失败问题

你的问题出在反射调用时的参数匹配逻辑错误:

  1. 当命令无参数时,Command.args.ToArray()生成空数组,但你的方法需要一个string?参数,Invoke无法匹配到对应重载。
  2. 当命令有多个参数时,Invoke会把数组中每个元素作为独立参数传递,而你的方法仅接受单个参数,导致参数数量不匹配。
  3. 未指定参数类型获取方法,可能出现重载匹配偏差。

修改后的代码

public class Command {
   public static void Interpret(AST.Command Command) {
      if (Command.command == null) return;

      // 明确指定参数类型,精准获取目标方法
      var targetMethod = typeof(Interpreter.Command).GetMethod(
          Command.command, 
          new[] { typeof(string?) }
      );

      if (targetMethod == null) return;

      // 构建匹配方法参数的数组:始终传递单个元素(参数或null)
      object[] invokeParams = Command.args?.Any() == true 
          ? new object[] { Command.args.FirstOrDefault() } 
          : new object[] { null };

      targetMethod.Invoke(null, invokeParams);
   }

   public static void quit(string? args) {
      System.Environment.Exit(1);
   }

   public static void info(string? args) {
      Console.WriteLine("MathDoer Info :\n\tVersion : 0.0.1\n\tBy : Wiazarr");
   }
}

核心修复说明

  • 精确匹配方法:通过GetMethod的参数类型指定,确保找到接受string?的方法重载,避免匹配错误。
  • 统一参数格式:无论命令有无参数,都构建包含一个元素的参数数组:
    • 无参数时传递null(符合string?的类型要求)
    • 有参数时取第一个参数传递(若需支持多参数拼接,可改为string.Join(" ", Command.args))
  • 增加空值判断,避免空引用异常。

内容的提问来源于stack exchange,提问作者Wiazarr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:02:51