运算符'||'不能应用于 'bool?' 和 'bool?' 类型的操作数

Operator '||' cannot be applied to operands of type 'bool?' and 'bool?'

我想检查两个字符串之一是否包含部分字符串。 知道 firstString 或 secondString 可以为空,我尝试了以下操作:

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

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

我收到编译时错误提示:

Operator '||' cannot be applied to operands of type 'bool?' and 'bool?'

似乎 String?.Contains("1") 的结果是可为空的布尔值。

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

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

克服此错误的最佳方法是什么?我可以避免写两个嵌套的 if 吗?

这取决于您希望如何评估 null 值:如 truefalse。假的我习惯了

如果是这样,您可以使用空合并运算符:

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

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

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