我经常写代码如下:
<img class="hasMenu" src="<%= (Model.Image==null)?Url.Content("~/Content/NoImage.jpg"):Model.Image.standard %>"
alt="Main image" />
是否有任何预定义的功能可以美化此代码?
类似于:ValueOrDefault(Model.Image.standard,Url.Content("~/Content/NoImage.jpg"))
答案 0 :(得分:2)
如果你的意思是:
(Model.Image.standard==null)?Url.Content("~/Content/NoImage.jpg"):Model.Image.standard
然后使用null-coalescing operator简化:
Model.Image.standard ?? Url.Content("~/Content/NoImage.jpg")
如果你的意思是你所说的,你可以写一个像这样的方法:
static class Obj
{
public static T OrDefault<T>(Func<T> func, T def)
{
T result;
try
{
result = func();
}
catch (NullReferenceException)
{
result = def;
}
return result;
}
}
并像这样使用它:
Obj.OrDefault(() => Model.Image.standard, Url.Content("~/Content/NoImage.jpg"))
答案 1 :(得分:0)
不,无法检查某个字段是否为null
,并且在与基本运算符相同的语句中使用其属性,而不是您已经完成的方式。有关“属性null-coalescing operator”的讨论,但在搜索论坛时我无法找到它。
您编码它的方式是最有效的方式,可能是可读性的方式。