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

使用C#属性获取最长字符串长度时结果错误的技术求助

问题分析与修复方案

你的代码里有两个关键问题导致返回结果不符合预期:

1. 循环内提前返回,仅检查了第一个节点

看你的for循环逻辑:

for (Node i = Head; i != null; i = i.Next) { 
    if (i.Text.Length > min) { 
        longest = i.Text.Length.ToString(); 
    }
    return longest; // 这里是核心问题!第一次循环就直接返回了
}

return longest;被放在了循环内部,这意味着程序刚遍历到第一个节点(也就是"Petar",长度5)就直接终止并返回结果,根本没机会检查后面的"Google"(长度6)。

2. 未更新跟踪最大长度的变量min

你初始化了min = int.MinValue,但当找到更长的字符串时,没有更新min的值。这会导致后续所有字符串的长度都会被判定为大于int.MinValue,不断覆盖longest的值——哪怕后面的字符串更短,也会被错误替换。


修正后的代码

public string Longest { 
    get { 
        int maxLength = 0; // 初始化为0,因为字符串长度不可能为负
        string longestLengthStr = "0"; 
        for (Node i = Head; i != null; i = i.Next) { 
            if (i.Text.Length > maxLength) { 
                maxLength = i.Text.Length; // 每次找到更长的字符串就更新最大长度
                longestLengthStr = maxLength.ToString(); 
            }
            // 移除循环内的return语句
        }
        return longestLengthStr; // 遍历完所有节点后再返回结果
    } 
}

关键修改说明:

  • 将return语句移到循环外部,确保能遍历完链表中所有节点再返回最终结果。
  • 用maxLength变量跟踪当前找到的最大长度,每次匹配到更长的字符串时更新这个变量,避免错误覆盖结果。
  • 初始值设为0更合理,因为字符串的长度本身是非负的,即使链表中存在空字符串也能正确处理。

用你的测试列表("Petar"(5)、"AHS"(3)、"Google"(6)、"Me"(2))测试,修正后的代码会正确返回"6"。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:02:47