方法无重载 "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"))
所以我有一个
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"))