Winforms开发小猪拉丁语翻译器输出结果异常问题咨询
小猪拉丁语翻译器功能异常修复方案
问题根因
- 验证逻辑倒置:
Validator方法中判断输入合法性的条件写反,当前代码要求输入无任何字母才执行转换,合法的纯字母单词(如你输入的Bob)无法进入转换流程,导致输出异常 - 输出赋值逻辑错误:多单词转换场景下,每次调用
Convert直接覆盖输出标签内容,最终只会显示最后一个单词的转换结果 - 冗余代码无效:
Convert方法中对单个字符串调用String.Join属于无意义操作,不会产生预期效果 - 输出带集合类型名是因为之前的代码存在直接将
List<string>类型变量赋值/拼接给输出标签的操作,List默认ToString()方法会输出类型全名而非集合内的内容
修复步骤
- 修正验证逻辑的条件判断,仅当输入全部为字母时才通过验证
- 改造方法返回值,将转换结果返回后统一拼接,避免多次覆盖输出标签
- 移除冗余的
String.Join调用 - 每次转换前清空输出内容,避免残留上一次转换的结果
修复后完整代码
private void btn_Translate_Click(object sender, EventArgs e) { // 清空上一次输出 lbl_Output.Text = string.Empty; List<string> translatedList = new List<string>(); string userInput = box_Input.Text.Trim(); // 先判断输入整体是否为空 if (string.IsNullOrEmpty(userInput)) { Error(1); Error(0); return; } // 统一拆分处理,不需要单独判断是否有空格 string[] inputWords = userInput.Split(' '); foreach (string word in inputWords) { if (Validator(word)) { translatedList.Add(Convert(word)); } else { // 验证失败直接终止流程 return; } } // 所有单词转换完成后统一赋值给输出标签 lbl_Output.Text = string.Join(" ", translatedList); } // 改造为布尔返回值,验证通过返回true,失败返回false public bool Validator(string inputStr) { if (string.IsNullOrEmpty(inputStr)) { Error(1); Error(0); return false; } if (inputStr.Length < 2) { Error(1); Error(0); return false; } // 修正判断:仅当所有字符都是字母时验证通过 if (!inputStr.All(x => char.IsLetter(x))) { Error(3); Error(0); return false; } return true; } // 改造为字符串返回值,直接返回转换后的结果,不操作UI控件 public string Convert(string rawWord) { string firstChar = rawWord.Substring(0, 1); string restPart = rawWord.Substring(1); const string suffix = "ay"; return $"{restPart}{firstChar}{suffix}"; }
内容的提问来源于stack exchange,提问作者KyleC
相关产品推荐
相关产品推荐

