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

WPF应用C#循环逻辑异常:多段print指令仅输出首个内容

问题排查与解决方案

问题根源分析

你的代码输出仅显示"a",大概率是以下两个原因之一:

  1. 循环条件限制了有效行的处理:
    当输入为print.a;print.b;时,Split(';')得到的数组是["print.a", "print.b", ""],长度为3。你的循环条件i < lines.Length -1虽然能处理前两个元素,但如果输入结尾没有分号(比如print.a;print.b),数组长度为2,lines.Length -1 =1,循环只会处理索引0的元素,直接忽略print.b。
  2. 分割后的字符串包含空白字符:
    如果输入中;和print之间有空格(比如print.a; print.b;),lines[1]会是" print.b",用.分割后得到[" print", "b"],此时" print"和"print"不相等,不会触发拼接逻辑,自然不会输出"b"。

另外,内层循环遍历所有分割元素的逻辑冗余,你的场景下每个语句只有一个print关键字,没必要遍历全部索引。

修复后的代码

private void Button_Click(object sender, RoutedEventArgs e)
{
    string[] lines = code.Text.Split(';');
    string labelContent = "";

    foreach (var line in lines)
    {
        // 跳过空行或空白行
        if (string.IsNullOrWhiteSpace(line))
            continue;

        string[] dotSeparated = line.Split('.');
        // 确保分割后至少有2个元素,且第一个元素是print(忽略空白)
        if (dotSeparated.Length >= 2 && dotSeparated[0].Trim() == "print")
        {
            labelContent += dotSeparated[1].Trim();
        }
    }

    lb.Content = labelContent;
}

关键优化点

  • 遍历所有行并过滤空白:用foreach遍历所有分割结果,通过string.IsNullOrWhiteSpace跳过空行,避免依赖结尾分号的格式。
  • 直接判断分割后的第一个元素:不需要遍历所有索引,直接检查分割后的第一个元素是否为print(用Trim()处理可能的空白)。
  • 索引越界防护:判断dotSeparated.Length >=2,避免因输入格式错误(比如print;)导致的索引越界异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:06:27