Как обработать возможность нулевых переменных в коде Razor? - PullRequest
2 голосов
/ 24 октября 2011

У меня есть код Razor, который имеет условную логику, основанную на том, установлена ​​ли определенная переменная массива. У меня чертовски много времени, чтобы выяснить, как лучше всего справиться, когда он нулевой, и я не доволен своим грязным решением.

Вот простой пример того, что происходит:

@{
    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 ]

4 голосов
/ 24 октября 2011

Этот вид работы не относится к представлению:

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

Проблема, с которой вы столкнулись, заключается именно в том, почему это так.Ваша проблема сводилась к тому, что bar не был правильно определен.Если бы вместо этого эта работа происходила в ViewModel, аналогичная ошибка немедленно вызвала бы ошибку компилятора.Вместо этого вы не узнаете об этом, пока не скомпилируете и не используете приложение, а выдаваемая вами ошибка часто может быть загадочной и ее трудно отследить.

0 голосов
/ 24 октября 2011

Вы решили собственную проблему.

Переменная bar не входила в область действия, поскольку вы объявили ее в блоке if.Ваше изменение расширило его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...