运营商'||'不能应用于'bool'类型的操作数?和'布尔?'

时间:2018-02-13 11:06:10

标签: c# logical-operators

我想检查两个字符串中的一个是否包含部分字符串。 知道firstString或secondString可以为null,我尝试了以下内容:

 string firstString= getValue();
 string secondString= getValue();

 if (firstString?.Contains("1") || secondString?.Contains("1"))
   {
     //logic
   }

我收到编译时错误,提到:

  

运营商'||'不能应用于'bool'类型的操作数?和   '布尔?'

看起来像String的结果?.Contains(“1”)是可以为空的布尔值。

这个错误实际上对我有意义,因为运行时间可能会面临:

{null||true, null||false, null||null, etc..}

覆盖此错误的最佳方法是什么?我可以避免写两个嵌套的ifs吗?

2 个答案:

答案 0 :(得分:10)

这取决于您要评估null值的方式:truefalse。我习惯了。

如果是这样,您可以使用null-coalescing运算符:

(firstString?.Contains("1") ?? false) || (secondString?.Contains("1") ?? false)

答案 1 :(得分:0)

这将是一种非常天真的做法,但您可以通过检查字符串为空或使用“&&”来避免嵌套if条件。运算符,作为下面的示例条件。

if ((!string.IsNullOrEmpty(firstString) && firstString.Contains("1")) || (!string.IsNullOrEmpty(secondString) && secondString.Contains("1")))
{
                //logic
}