#c# #asp.net-mvc-3
#c# #asp.net-mvc-3
Вопрос:
try
{
var orderedListOfRfidTags = uow.RfidTags.ToList().OrderBy(t => int.Parse(t.Number));
return View(orderedListOfRfidTags);
}
catch
{
var orderedListOfRfidTags = uow.RfidTags.OrderBy(t => t.Number).ToList();
return View(orderedListOfRfidTags);
}
MVC3 — в режиме выпуска это все равно приведет к сбою в первой строке var ordreedListOfRfidTags…
Интересно, почему try catch не пытается и не улавливает?
затем, нажав F10, он переходит сюда.. который является частью моей ORM-оболочки… хм, интересно, в этом ли проблема.
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (_unitOfWorkScope != null)
{
_unitOfWorkScope.Dispose();
}
base.OnResultExecuted(filterContext);
}
Комментарии:
1. Вы уверены, что сбой происходит в первой строке, а не в той, что в catch? (например, uow. Значение RfidTags равно нулю)
2. Не могли бы вы объяснить свой код, пожалуйста?
3. Какие попытки, какой улов? Ожидаемый результат? Фактический результат? Что не удается? Что произойдет, если первая строка завершится ошибкой?
4. Также может быть легко забыть, что это не приведет к перехвату каких-либо исключений, возникающих при рендеринге представления.
Ответ №1:
Делегат, переданный OrderBy, не вызывается до тех пор, пока вы не попытаетесь получить доступ к элементам в списке.
Итак, я думаю, что ошибка не перехвачена, потому что ваша коллекция не перечисляется до тех пор, пока не будет отображено представление, после возврата метода action.
Ответ №2:
Это плохой дизайн; у вас не должно быть никакого кода в вашем catch, который потенциально мог бы вызвать другое исключение.
Если я правильно понимаю ваш код, вы хотите попытаться разобрать RFID на int
, но в случае сбоя вернуться к string
своей сортировке?
Если вы не можете гарантировать, что Numbers
из RfidTag
s не будет числом (что кажется глупой структурой именования), тогда я бы оставил это как сортировку строки и отказался от синтаксического анализа int
Ответ №3:
Ответ заключался в том, что скорость света не срабатывала. Как только поддержка была добавлена (очень быстро — потрясающий продукт!) все работало нормально:
// trying to convert to an int.. if fail, use string
// need up to date nightly build of LS3.1 for this to work
// otherwise trycatch will fail due to LS crashing out.
try
{
var orderedListOfRfidTags = uow.RfidTags
.OrderBy(t => Convert.ToInt32(t.Number))
.ToList();
return View(orderedListOfRfidTags);
}
catch
{
var orderedListOfRfidTags = uow.RfidTags
.OrderBy(t => t.Number)
.ToList();
return View(orderedListOfRfidTags);
}