没有方法重载#34;包含"

时间:2016-03-16 00:07:28

标签: c# overloading

所以我有一个

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

然后我开始添加139项,直到我意识到它没有工作

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

3 个答案:

答案 0 :(得分:2)

使用LINQ:

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

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

答案 1 :(得分:1)

嗯,这只是一个AND操作。您真正想要实现的是知道文本是否同时包含text1 AND text2text3等等。所以,只需要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) { // }

这正是来自Any()的{​​{1}}和All()扩展方法的工作原理。所以你可以用它们代替(少代码)

System.Linq

或者

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

答案 2 :(得分:1)

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

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

OR

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