C# Foreach循环删除过多单词
有人能帮我解决foreach循环的问题吗?我要做的是从搜索词组中删除禁用词,禁用词在数据库中,然后我拆分搜索词组,并尝试将词组中的词与禁用列表中的词进行比较 问题在于if-else部分没有达到禁止的工作检查 谢谢你的帮助C# Foreach循环删除过多单词,c#,c#-4.0,C#,C# 4.0,有人能帮我解决foreach循环的问题吗?我要做的是从搜索词组中删除禁用词,禁用词在数据库中,然后我拆分搜索词组,并尝试将词组中的词与禁用列表中的词进行比较 问题在于if-else部分没有达到禁止的工作检查 谢谢你的帮助 /// ///Banned Word List /// string newSearchPhrase = string.Empty;
///
///Banned Word List
///
string newSearchPhrase = string.Empty;
string bannedWord = string.Empty;
var BannedWords = _IGBW.BannedWords().ToList();
bannedWord = BannedWords.ToString();
foreach (string searchWords in TextClean.Split(' '))
{
if (bannedWord.ToLower() == searchWords.ToLower())
{
newSearchPhrase = Regex.Replace(searchWords, bannedWord, " ");
}
else
{
newSearchPhrase = searchWords;
}
}
string bannedWordsRemoved = newSearchPhrase;
您的问题在于这一行:
bannedWord = BannedWords.ToString();
你真正想要的是:
bannedWord = string.Join(" ", BannedWords);
但是,整个方法可以用更干净的方式编写,如下所示:
var bannedWords = new HashSet<string>(_IGBW.BannedWords().ToList().Cast<string>(), StringComparer.OrdinalIgnoreCase);
var cleaned = string.Join(" ", TextClean.Split(' ').Where(w => !bannedWords.Contains(w)));
var bannedWords=new HashSet(_IGBW.bannedWords().ToList().Cast(),StringComparer.OrdinalIgnoreCase);
var cleaned=string.Join(“”),TextClean.Split(“”)。其中(w=>!bannedWords.Contains(w));
在我看来,您正在通过以下方式将搜索字符串拆分为单词:
foreach (string searchWords in TextClean.Split(' '))
但您并不是在构建一个新的搜索字符串,您只是在一个位置将单个单词分配给newSearchPhrase
newSearchPhrase = Regex.Replace(searchWords, bannedWord, " ");
及
//jk执行此操作时:
bannedWord.ToLower() == searchWords.ToLower()
您正在将一个字符串与一个字符串进行比较,因此如果您有多个被禁止的单词,您将测试如下内容:
"bannedword1 bannedword2 bannedword3" == "bannedword1"
这永远不会是真的
你想要的是:
BannedWords.Contains(searchWords.ToLower())
或者,如果您的禁用词不一定是小写:
BannedWords.Select(word=>word.ToLower()).Contains(searchWords.ToLower())
此外,您的NewSearchPhase字符串始终被覆盖,因此在最后一行设置bannedWordsRemoved时,它将始终设置为空字符串或1个单词字符串
为清晰起见,请编辑:
string newSearchPhrase = string.Empty;
var BannedWords = _IGBW.BannedWords().ToList();
foreach (string searchWord in TextClean.Split(' '))
{
if (!BannedWords.Select(word=>word.ToLower()).Contains(searchWord.ToLower()))
{
newSearchPhrase += searchWord +" ";
}
}
string bannedWordsRemoved = newSearchPhrase;
您的意思是说flow没有为clbuttic解决方案输入foreach?时间?您好,Rich,您的代码出现以下错误:错误1“System.Collections.Generic.HashSet.HashSet(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)”的最佳重载方法匹配'一些无效的参数Varaks有效吗ok@CareerChange回答已更新,请立即尝试。谢谢Varak,成功了
string newSearchPhrase = string.Empty;
var BannedWords = _IGBW.BannedWords().ToList();
foreach (string searchWord in TextClean.Split(' '))
{
if (!BannedWords.Select(word=>word.ToLower()).Contains(searchWord.ToLower()))
{
newSearchPhrase += searchWord +" ";
}
}
string bannedWordsRemoved = newSearchPhrase;