页面模板中的null和默认值

时间:2010-09-19 18:47:01

标签: c# asp.net-mvc

我经常写代码如下:

<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"))

2 个答案:

答案 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”的讨论,但在搜索论坛时我无法找到它。

您编码它的方式是最有效的方式,可能是可读性的方式。