我有一些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时,代码可以正常工作。有一个更好的方法来处理这个...任何人?
答案 0 :(得分:4)
此类作品不属于视图:
@{
if (ViewBag.Foo != null)
{
double[] bar = new double[ViewBag.Foo.Length];
}
}
你遇到的那种问题正是这种情况的原因。您的问题归结为bar
未正确确定范围。如果相反这项工作在ViewModel中讨厌,类似的错误会立即给你一个编译器错误。相反,在编译和使用应用程序之前,您不会发现,并且您给出的错误通常很神秘并且难以追踪。
答案 1 :(得分:0)
你解决了自己的问题。
bar变量不在范围内,因为您在if块中声明了它。你的改变扩大了它。