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

如何解析ProgramWindow文本框多行命令并依次执行实现图形绘制

问题排查

你现有代码的核心问题集中在以下几点:

  • 循环边界错误:i <= NumberOfCommands会触发数组索引越界,数组下标从0开始,长度为n的数组最大下标为n-1
  • 未按行处理:每次循环都读取整个文本框的完整内容拆分,永远只解析第一行有效命令
  • 参数传递错误:将StringSplitOptions.RemoveEmptyEntries枚举强转为char传入Split方法,拆分逻辑完全不符合预期
  • 无异常兼容:没有处理空行、空白行的情况,遇到无效行时直接访问Input[0]会触发崩溃
修正后可运行代码
void Parse()
{
    // 拆分多行同时过滤空行,兼容不同操作系统的换行符
    string[] Lines = ProgramWindow.Text.Split(new[] {'\n', '\r'}, StringSplitOptions.RemoveEmptyEntries);
    int NumberOfCommands = Lines.Length;
    
    for (int i = 0; i < NumberOfCommands; i++)
    {
        // 仅处理当前循环对应的单行内容
        string currentLine = Lines[i].Trim().ToLower();
        if (string.IsNullOrWhiteSpace(currentLine)) continue;
        
        // 按空格拆分命令与参数,最多拆2段避免异常
        string[] Input = currentLine.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries);
        if (Input.Length == 0) continue;
        
        string Command = Input[0];
        int[] Parameters = Input.Length <= 1 ? new int[0] : Input[1].Split(',').Select(item => int.Parse(item.Trim())).ToArray();
        
        int X = Parameters.Length >= 1 ? Parameters[0] : 0;
        int Y = Parameters.Length >= 2 ? Parameters[1] : 0;
        
        Console.WriteLine(Command);
        Console.WriteLine(X);
        Console.WriteLine(Y);
        Commands(Command, X, Y);
        Refresh();
    }
}
关键调整说明
  • 优化了换行拆分逻辑,同时处理\r、\n两种换行符,自动过滤空行减少无效处理
  • 循环边界改为i < NumberOfCommands,彻底避免数组越界问题
  • 每次循环仅处理当前遍历到的单行内容,实现逐行解析执行的需求
  • 修正Split方法的参数错误,使用正确的枚举值控制拆分逻辑
  • 增加空白行、无效行的校验逻辑,提升代码稳定性
  • 参数拆分时增加Trim处理,兼容参数前后带空格的输入场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:24:03