文本框指定单词检测功能异常:仅识别列表首个单词
问题分析与修复方案
嘿,我一眼就看出问题出在哪了——你的ContentCheck()方法里的foreach循环逻辑有问题!
现在的代码里,第一次循环检查第一个单词"duck"的时候,如果文本里不包含它,就直接return false了,后面的"donkey"、"horse"这些单词完全没机会被检查到。这就是为什么只能检测列表第一个单词的原因。
修复后的代码
只需要把循环里的else分支去掉,让循环遍历完所有过滤词再返回结果就行:
private bool ContentCheck() { List<string> FilteredWords = new List<string>() { "duck", "donkey", "horse", "goat", "dog", "cat", //list of censored words "lion", "tiger", "bear", "crocodile", "eel", }; foreach (var e in FilteredWords) { if (memoEdit1.Text.Contains(e)) { return true; // 找到匹配的词,立刻返回true } // 不匹配就继续检查下一个词,不要提前返回false } // 所有词都检查完了,没有匹配的才返回false return false; }
更简洁的写法(用LINQ)
如果你习惯用LINQ的话,还能把代码简化成一行,逻辑完全一样,可读性更强:
private bool ContentCheck() { List<string> FilteredWords = new List<string>() { "duck", "donkey", "horse", "goat", "dog", "cat", "lion", "tiger", "bear", "crocodile", "eel", }; return FilteredWords.Any(word => memoEdit1.Text.Contains(word)); }
Any()方法会自动遍历整个列表,只要有一个单词被文本包含就返回true,全部不匹配才返回false,完美解决你的问题。
内容的提问来源于stack exchange,提问作者Ghost443
相关产品推荐
相关产品推荐

