c#如果包含AND / OR

时间:2014-03-21 18:31:18

标签: c# visual-studio-2003

有这个变种吗?

if (blabla.Contains("I'm a noob") | blabla.Contains("sry") | blabla.Contains("I'm a noob "+"sry"))
    {
        //stuff
    }

像:

if (blabla.Contains("I'm a noob) and/or ("sry")
    {
        //stuff
    }

非常感谢帮助!

4 个答案:

答案 0 :(得分:2)

根据你的要求,你不能完全崩溃,但你可以这样做:

if (blabla.Contains("I'm a noob") || blabla.Contains("sry"))
{
    //stuff
}

"和" case在这里处理,因为带有两者的字符串实际上会传递"或"中的两个语句。

答案 1 :(得分:1)

var arr = new[]{"I'm a noob" ,"sry", "I'm a noob +sry"};
if(arr.Any(x => blabla.Contains(x)))
{

}

答案 2 :(得分:0)

您可以使用正则表达式:

Regex r = new Regex("I'm a noob|sry|I'm a noob sry");
if(r.IsMatch(blabla)) {
    //TODO: do something
}

正则表达式具有其他高级功能,例如:a*与空字符串匹配,aaaaaa,...

有趣的是,如果你“编译”正则表达式(例如使用new Regex("I'm a noob|sry|I'm a noob sry",RegexOptions.Compiled),C#会自动将其转换为最快的解决方案机制。例如,如果blabla是一个100k字符串,你只会在整个字符串上运行一次。例如I'm a noob sry等冗余部分将被自动省略。

答案 3 :(得分:0)

据我所知,没有内置方法可以做到这一点。但是使用一些LINQ和扩展方法,您可以创建自己的方法来检查字符串是否包含任何或所有标记:

public static class ExtensionMethods{
    public static bool ContainsAny(this string s, params string[] tokens){
        return tokens.Any(t => s.Contains(t));
    }

    public static bool ContainsAll(this string s, params string[] tokens){
        return tokens.All(t => s.Contains(t));
    }
}

你可以像这样使用它(请记住,params数组采用可变数量的参数,所以你不仅限于我的例子中的两个):

var str = "this is a string";
Console.WriteLine(str.ContainsAny("this", "fake"));
Console.WriteLine(str.ContainsAny("doesn't", "exist"));
Console.WriteLine(str.ContainsAll("this", "is"));
Console.WriteLine(str.ContainsAll("this", "fake"));

输出:

  


  假
  真
  假

编辑:

为了记录,LINQ不是必需的。你可以这样轻易地写出来:

public static class ExtensionMethods{
    public static bool ContainsAny(this string s, params string[] tokens){
        foreach(string token in tokens)
            if(s.Contains(token)) return true;
        return false;
    }

    public static bool ContainsAll(this string s, params string[] tokens){
        foreach(string token in tokens)
            if(!s.Contains(token)) return false;
        return true;
    }
}