嵌套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
{
""
}
}
是使用一行的唯一解决方案吗?或者有更好的解决方案吗?
正如其他人所说,一行中的所有限制将妨碍可读性,但是您可以使用短路布尔计算来为现有的条件表达式添加保护,如下所示:
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>