我有代码忽略用户输入的常用单词:
string[] ignored_words = { "the", "and", "I" };
String[] words = UserInput.Split(' ');
foreach (string word in words)
{
if (!ignored_words.Any(word.Equals))
{
// perform actions on desired words only
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法很有效,除非情况有误("THE"因为用户输入不会被"被忽略的单词"捕获).
如何在Equals比较中添加IgnoreCase子句?
Tim*_*ter 16
if (!ignored_words.Any(w => w.Equals(word, StringComparison.CurrentCultureIgnoreCase)))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者使用String.Equals没有null值问题的静态:
if (!ignored_words.Any(w => string.Equals(w, word, StringComparison.CurrentCultureIgnoreCase)))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
你需要传递一个lambda表达式:
ignored_words.Any(w => word.Equals(w, StringComparison.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
但是,通过使用更多LINQ,您可以使代码更简单,更快捷:
foreach (string word in words.Except(ignored_words, StringComparer.OrdinalIgnoreCase))
Run Code Online (Sandbox Code Playgroud)
作为一种更有效的方式:
// note: the exact comparer deserves some thought; cultural? ordinal? invariant?
var ignored_words = new HashSet<string>(StringComparer.CurrentCultureIgnoreCase)
{
"the", "and", "I"
};
foreach (string word in words)
{
if (!ignored_words.Contains(word))
{
// perform actions on desired words only
}
}
Run Code Online (Sandbox Code Playgroud)