所以我有一个
if (toolStripTextBox1.Text.Contains("text1", "text2", "text3", ... "text139"
然后我开始添加139项,直到我意识到它没有工作
我如何重载Contains方法?或者只是绕过限制..
答案 0 :(得分:2)
使用LINQ:
var items = new[]{"text1", "text2", "text3", ... "text139"};
if (items.Any(item => toolStripTextBox1.Text.Contains(item)) ...
答案 1 :(得分:1)
嗯,这只是一个AND
操作。您真正想要实现的是知道文本是否同时包含text1
AND text2
和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) { // }
这正是来自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"))