if (description.ToUpper().Contains("BOUGHT") || description.ToUpper().Contains("PURCHASE"))
上面的代码是我所拥有的,我想知道我是否有相同条件的更长字符串列表,如何在不使代码太长的情况下执行此操作。也许是一个lambda表达式?
答案 0 :(得分:7)
不,没有内置功能。但是自己写它并不难:
string[] needles = new string[]{"BOUGHT", "PURCHASE"};
string haystack = description.ToUpperInvariant();
bool found = needles.Any(needle=> haystack.Contains(needle));
我只将hackstack
转换为一次以提升效果。
或者您可以使用IndexOf(needle, StringComparison.OrdinalIgnoreCase)>=0
:
string[] needles = new string[]{"BOUGHT", "PURCHASE"};
string haystack = description;
bool found = needles.Any(needle=> haystack.IndexOf(needle, StringComparison.OrdinalIgnoreCase)>=0);
你不应该在这里使用ToUpper()
,因为它使用了当前的文化。使用当前文化可能会导致某些计算机出现意外问题,例如i
在使用土耳其文化时不会大写到I
。
在双方ToUpperInvariant()
和不区分大小写的比较可能会返回不同的结果时,可能仍然存在一些微妙的问题,但只有在大海捞针和针头都有不寻常的字符时才会有相关性。
答案 1 :(得分:2)
您可以将代码重写为以下内容:
var words = new[] { "BOUGHT", "PURCHASE" };
var desc = description.ToUpper();
if(words.Any(w => description.Contains(w)) {
// something matched
}
答案 2 :(得分:1)
if (someCollectionOfStrings.Any(string => originalString.Contains(string))
{
//stuff
}
答案 3 :(得分:1)
Regex.IsMatch(input, string.Join("|", strings));
如果字符串包含正则表达式控制字符,则可能必须转义它们。
答案 4 :(得分:1)
if (Regex.IsMatch(description, "purchase|bought", RegexOptions.IgnoreCase)) {
// ...
}
答案 5 :(得分:0)
public static bool ContainsOneOfManyIgnoreCase(this string str, params string [] items)
{
return items.Any(x => str.IndexOf(x, StringComparison.CurrentCultureIgnoreCase) != -1);
}