使用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
相关产品推荐
相关产品推荐

