忽略Linq.Any中的案例,C#

Tra*_*ter 8 c# linq

我有代码忽略用户输入的常用单词:

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)


SLa*_*aks 8

你需要传递一个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)


Mar*_*ell 6

作为一种更有效的方式:

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

  • @TravisHeeter不,那是不一样的`包含'; 你所描述的是`string.Contains`; 我正在使用`HashSet <string> .Contains` - 它的工作方式完全不同:它可以正常工作 (3认同)