C#if string包含多于1个值

时间:2012-11-08 07:15:40

标签: c# string if-statement comparison

早上好,

if语句中,如果我们想检查字符串是否包含值,我们有:

if (string.Contains("Value1"))    
{    
}    

如何在不继续编写整个语句的情况下使字符串与if语句中的更多值进行比较?例如,要避免以下声明

if ((string.Contains("Value1") && (string.Contains("Value2")) && (string.Contains("Value3")))    
{    
}

谢谢

5 个答案:

答案 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)))