早上好,
在if
语句中,如果我们想检查字符串是否包含值,我们有:
if (string.Contains("Value1"))
{
}
如何在不继续编写整个语句的情况下使字符串与if语句中的更多值进行比较?例如,要避免以下声明
if ((string.Contains("Value1") && (string.Contains("Value2")) && (string.Contains("Value3")))
{
}
谢谢
答案 0 :(得分:7)
因此,基本上,您要检查字符串中是否包含所有值。幸运的是(在LINQ的帮助下),这几乎可以翻译成C#:
var values = new String[] {"Value1", "Value2", "Value3"};
if (values.All(v => myString.Contains(v))) {
...
}
同样,如果您想检查字符串中是否包含任何值,您可以All
替换Any
。
答案 1 :(得分:3)
好吧,你可以使用LINQ:
string[] requiredContents = { "Foo", "Bar", "Baz" };
if (requiredContents.All(x => text.Contains(x))
{
...
}
请注意,就像短路&&
运算符一样,All
会在找到不满足条件的值时立即停止。 (如果你想在其他地方以类似的方式使用Any
,那么一旦找到 满足条件的值,它就会停止。)
虽然我不会打扰一个相当小的数字。如果没有无关的括号,那真的不是那么糟糕:
if (text.Contains("foo") && text.Contains("bar") && text.Contains("Baz"))
{
}
我只会开始使用更一般的形式,如果要么真的有相当多的值(我可能会在5左右划线)或如果一组值作为参数传递,或以其他方式变化。
答案 2 :(得分:1)
因为您需要“您的”字符串包含所有值:
var values = new String[] {"Value1", "Value2", "Value3"};
var s = yourString;
if (values.Count(v => s.Contains(v)) == values.Length) {
...
}
答案 3 :(得分:1)
这是最好的解决方案吗?可能不是。它是否可读和可扩展?是。
var matches = {"string1", "string2", "string3","string-n"};
var i = 0;
foreach(string s in matches)
{
if(mystring.Contains(s))
{
i++;
}
}
if(i == matches.Length)
{
//string contains all matches.
}
答案 4 :(得分:1)
if(stringArray.Any(s => stringToCheck.Contains(s)))
如果您想确保它包含所有子字符串,请将Any
更改为All
:
if(stringArray.All(s => stringToCheck.Contains(s)))