C# 操作员'||';无法应用于类型为';布尔?&x27;和';布尔?&x27;
我想检查两个字符串中是否有一个包含部分字符串。 知道firstString或secondString可以为null,我尝试了以下操作: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 } 我收到一个编译时错误,其中提到: 运算符“| |”不
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
值:astrue
或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()