5

早上好,

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

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

我们如何在不写整个语句的情况下让字符串与 if 语句中的更多值进行比较?例如为了避免下面的语句

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

谢谢

4

5 回答 5

7

因此,基本上,您想检查您的所有值是否都包含在 string 中。幸运的是(在 LINQ 的帮助下),这几乎可以直接翻译成 C#:

var values = new String[] {"Value1", "Value2", "Value3"};

if (values.All(v => myString.Contains(v))) {
    ...
}

同样,如果您想检查字符串中是否包含任何值,您可以替换AllAny.

于 2012-11-08T07:17:44.667 回答
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 处画线),或者如果一组值作为参数传入,或者以其他方式变化,我只会开始使用更通用的形式.

于 2012-11-08T07:19:57.950 回答
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.
}
于 2012-11-08T07:23:20.183 回答
1
if(stringArray.Any(s => stringToCheck.Contains(s)))

如果要确保它包含所有子字符串,请更改AnyAll

if(stringArray.All(s => stringToCheck.Contains(s)))
于 2012-11-08T07:29:54.063 回答
1

由于您需要“您的”字符串来包含所有值:

var values = new String[] {"Value1", "Value2", "Value3"};
var s = yourString;

if (values.Count(v => s.Contains(v)) == values.Length) {
    ...
}
于 2012-11-08T07:19:22.837 回答