C# Foreach循环删除过多单词

C# Foreach循环删除过多单词,c#,c#-4.0,C#,C# 4.0,有人能帮我解决foreach循环的问题吗?我要做的是从搜索词组中删除禁用词,禁用词在数据库中,然后我拆分搜索词组,并尝试将词组中的词与禁用列表中的词进行比较 问题在于if-else部分没有达到禁止的工作检查 谢谢你的帮助 /// ///Banned Word List /// string newSearchPhrase = string.Empty;

有人能帮我解决foreach循环的问题吗?我要做的是从搜索词组中删除禁用词,禁用词在数据库中,然后我拆分搜索词组,并尝试将词组中的词与禁用列表中的词进行比较

问题在于if-else部分没有达到禁止的工作检查

谢谢你的帮助

                ///
                ///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;