嵌套if语句在一行中

本文关键字:一行 if 语句 嵌套 | 更新日期: 2023-09-27 18:08:11

现在我有以下一行:

<div class="<%#  productName.Url.Length > 3 ? "Classic": "" %>">..</div>

但问题是,productName可以为空,所以我收到以下错误:Object reference not set to an instance of an object .

所以我需要确保这个if语句只在productName不为空时执行。

:

    if (productName.Url != null)
    {
        if (productName.Url.Length > 3)
        {
            "Classic"
        }
        else
        {
            ""
        }
    }

是使用一行的唯一解决方案吗?或者有更好的解决方案吗?

嵌套if语句在一行中

正如其他人所说,一行中的所有限制将妨碍可读性,但是您可以使用短路布尔计算来为现有的条件表达式添加保护,如下所示:

productName != null && productName.Url != null && productName.Url.Length > 3 
     ? "Classic": ""
为了便于阅读,我通常将条件三元运算符格式化为:
var foo = prodName != null && prodName.Url != null && prodName.Url.Length > 3
  ? "Classic"
  : "";

同样,由于c# 6包含了空条件运算符,您可以将其稍微简化为:

var foo = productName?.Url != null && productName.Url.Length > 3 
   ? "Classic" 
   : "";

编辑,重新注释

条件操作符也可以嵌套(但现在确实需要缩进以保持完整性):

var foo = prodName?.Url != null 
     ? prodName.Url.Length > 3
          ? "Classic"
          : ""
     : "Default Value if Prod / Prod Url is null";

嵌套三元数组与基于开关的模式匹配

另外,请注意,随着c# 8的发布,我们将能够用更高级的基于switch的模式匹配
中的投影来替换三元运算符。

可以使用三元运算符?:

productName.Url != null && productName.Url.Length > 3 ? "Classic" : ""
<div class="<%# (productName != null && productName.Url != null && productName.Url.Length > 3) ? "Classic": "" %>">..</div>