现在我有以下一行:
<div class="<%# productName.Url.Length > 3 ? "Classic": "" %>">..</div>
但问题是productName可能为null所以我收到以下错误:Object reference not set to an instance of an object
。
所以我需要确保只有在productName不为null时执行if语句。
像这样:
if (productName.Url != null)
{
if (productName.Url.Length > 3)
{
"Classic"
}
else
{
""
}
}
使用一条线的唯一解决方案是什么?或者有更好的解决方案吗?
答案 0 :(得分:4)
您可以使用三元运算符?:
productName.Url != null && productName.Url.Length > 3 ? "Classic" : ""
答案 1 :(得分:3)
正如其他人所说的那样,所有单行限制都会妨碍可读性,但您可以使用短路布尔评估来为现有的条件表达式添加保护,如下所示:
productName != null && productName.Url != null && productName.Url.Length > 3
? "Classic": ""
FWIW的可读性我通常将条件三元运算符格式化为:
var foo = prodName != null && prodName.Url != null && prodName.Url.Length > 3
? "Classic"
: "";
此外,由于C#6包含null-conditional operator,您可以将其略微减少为:
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
based pattern matching
答案 2 :(得分:2)
<div class="<%# (productName != null && productName.Url != null && productName.Url.Length > 3) ? "Classic": "" %>">..</div>