方法无重载 "Contains"

No Overload for Method "Contains"

所以我有一个

if (toolStripTextBox1.Text.Contains("text1", "text2", "text3", ... "text139"

然后我开始添加 139 个项目,直到我意识到它不起作用

如何重载 Contains 方法?或者绕过限制..

使用 LINQ:

var items = new[]{"text1", "text2", "text3", ... "text139"};

if (items.Any(item => toolStripTextBox1.Text.Contains(item)) ...

嗯,这只是一个AND操作。你真正想要实现的是知道一个文本是否同时包含 text1 AND text2 AND text3 等等。所以你只需要 str.Contains("text1") && str.Contains("text2").

但你似乎在闻代码的味道。但是,我们不知道完整的场景。最好将所有部分添加到一个集合中,遍历它并检查字符串是否包含每个值。

如果您想检查您的文本框是否包含至少一个词,您可以在第一次出现时停止:

string[] words = { "text1", "text2", "text3" };
foreach (var word in words)
{
    if (toolStripTextBox1.Text.Contains(word)) break;
}

如果您想检查您的文本框是否包含所有单词,您需要停在第一个不包含的单词上并标记出错误:

string[] words = { "text1", "text2", "text3" };
bool allFound = true;

foreach (var word in words)
{
    if (!toolStripTextBox1.Text.Contains(word))
    {
        allFound = false;
        break;
    }
}

if (allFound) { // }

这正是 System.Linq 中的 Any()All() 扩展方法的工作原理。所以你可以改用它们(更少的代码)

string[] words = { "text1", "text2", "text3" };
if (words.All(w => toolStripTextBox1.Text.Contains(w))
{
    // do smth if all words are contained
}

string[] words = { "text1", "text2", "text3" };
if (words.Any(w => toolStripTextBox1.Text.Contains(w))
{
    // do smth if at least one word is contained
}

您可以构建自己的扩展方法,例如:

public enum Operation
{
     And,
     Or
}

public static bool Contains(this string text,Operation operation,params string[] args) 
 {
    switch(operation)
    {
        case Operation.And:
            return args.All(item => text.Contains(item));
        case Operation.Or:
            return args.Any(item => text.Contains(item));
        default:
            return false;
    }
 }

并像

一样使用它
if(toolStripTextBox1.Text.Contains(Operation.And,"text1", "text2", "text3"))

if(toolStripTextBox1.Text.Contains(Operation.Or,"text1", "text2", "text3"))