如何处理Razor代码中null变量的可能性?

时间:2011-10-24 05:27:46

标签: c# asp.net-mvc-3 razor

我有一些Razor代码,它具有基于是否设置某个数组变量的条件逻辑。我有一点时间找出最好的处理方法,当它为空时,我对我的kludgy解决方案不满意。

以下是一个简单的例子:

@{
    if (ViewBag.Foo != null)
    {
        double[] bar = new double[ViewBag.Foo.Length];
    }
}

稍后在代码中,我会有这样的事情:

@if (ViewBag.Foo != null)
{
    ...some code that uses `bar` goes here ...
}

使用该代码,当ViewBag.Foo实际为空时,我会收到错误。我得到一个异常抛出抱怨使用bar的第二部分代码并且它不在范围内。但是,在执行过程中,将始终跳过第二部分。

在搞了一段时间之后,我只是这样做了:

double[] bar;
@{
    if (ViewBag.Foo != null)
    {
        bar = new double[ViewBag.Foo.Length];
    }
}
else
{
    bar = new double[1];
}

通过此更改,当ViewBag.Foo为null且非null时,代码可以正常工作。有一个更好的方法来处理这个...任何人?

2 个答案:

答案 0 :(得分:4)

此类作品不属于视图:

@{
    if (ViewBag.Foo != null)
    {
        double[] bar = new double[ViewBag.Foo.Length];
    }
}

你遇到的那种问题正是这种情况的原因。您的问题归结为bar未正确确定范围。如果相反这项工作在ViewModel中讨厌,类似的错误会立即给你一个编译器错误。相反,在编译和使用应用程序之前,您不会发现,并且您给出的错误通常很神秘并且难以追踪。

答案 1 :(得分:0)

你解决了自己的问题。

bar变量不在范围内,因为您在if块中声明了它。你的改变扩大了它。