Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 操作员'||';无法应用于类型为';布尔?&x27;和';布尔?&x27;_C#_Logical Operators - Fatal编程技术网

C# 操作员'||';无法应用于类型为';布尔?&x27;和';布尔?&x27;

C# 操作员'||';无法应用于类型为';布尔?&x27;和';布尔?&x27;,c#,logical-operators,C#,Logical Operators,我想检查两个字符串中是否有一个包含部分字符串。 知道firstString或secondString可以为null,我尝试了以下操作: string firstString= getValue(); string secondString= getValue(); if (firstString?.Contains("1") || secondString?.Contains("1")) { //logic } 我收到一个编译时错误,其中提到: 运算符“| |”不

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

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

 if (firstString?.Contains("1") || secondString?.Contains("1"))
   {
     //logic
   }
我收到一个编译时错误,其中提到:

运算符“| |”不能应用于“bool”类型的操作数,并且 “布尔?”

似乎字符串的结果?.Contains(“1”)是可为空的布尔值

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

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

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

这取决于如何计算
null
值:as
true
false
。我习惯于说谎

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

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

这将是一种非常简单的方法,但是您可以通过使用“&&”操作符检查字符串是否为空或null来避免if条件的嵌套,如下所示为示例条件

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

对可空值的操作本身必须是可空的。
bool
或任何其他值类型的可空形式是可空的。我更喜欢
(firstString??)。包含(“1”)
我自己,以明确在没有字符串时我想要的语义是什么。(如果有人因为这个对空字符串的超昂贵操作而让我对“性能”感到悲伤——请不要这样做。)如果您不需要
|
的短路行为,那么您可以使用
|
。@PetSerAl-是的,这确实揭示了更深层次的问题。但是,您无法逃脱
bool?
导致
if()