Моя обработка ошибок в тех случаях, когда дело товар не найден в массиве?


 internal void ShiftSwapInstrument(SwapCurve shiftedCurve, string swapToShift)
 {
    if (SwapExists(shiftedCurve, swapToShift))
    {
       var rateToShift = shiftedCurve.Swaps.Single(r => r.Description() == swapToShift);
       rateToShift.Rate = rateToShift.Rate + 1 / 10000.0;
       return;
    }
    throw new PdhSwapRateNotFoundException(swapToShift);
 }

 private bool SwapExists(SwapCurve shiftedCurve, string swapToShift)
 {
    var swap = Array.Find(shiftedCurve.Swaps, r => r.Description() == swapToShift);
    return swap == null ? false : true;
 }

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

Мой вопрос, Является ли моя обработка исключений является правильным/возможным только тогда, когда элементы не обнаружены в мой массив, и это правильно для меня, чтобы вернуться; когда я делаю?

Вторичный вопрос

Я отметил про массив.Найти на MSDN

Возвращаемое Значение

Тип: Т первого элемента, удовлетворяющего условиям, определенным указанный предикат, если он найден; в противном случае-значение по умолчанию для типа Т.

Правильно ли я пониманию, что с SwapCurve & свопы представляют собой ссылочные типы по умолчанию будет значение null?



266
3
задан 7 октября 2011 в 07:10 Источник Поделиться
Комментарии
2 ответа

Ваша ошибка обработки выглядит правильно для меня так долго, как ваше приложение ловиИнг PdhSwapRateNotFoundException в какой-то момент и лесозаготовки соответствующее предупреждение/ошибка, чтобы уведомить Пользователя об этом.

Небольшое косметическое изменение в ваш код может быть как:

{
if (!SwapExists(shiftedCurve, swapToShift))
throw new PdhSwapRateNotFoundException(swapToShift);

var rateToShift = shiftedCurve.Swaps.Single(r => r.Description() == swapToShift);
rateToShift.Rate = rateToShift.Rate + 1 / 10000.0;
return; // you don't actually need this.
}

И вы правы по умолчанию значением ссылочного типа является нулем.

Редактировать:
Я предполагаю, что shiftedCurve.Свопы не быть нулем, иначе найти будет бросать исключение. И если вы думаете, что это может быть в случае, то вы можете обновить свой код, чтобы проверить shiftedCurve.Свопы == нуль и обработать его соответствующим образом.

1
ответ дан 7 октября 2011 в 09:10 Источник Поделиться

Мои мысли:

Шаг1:

Вам лучше, чтобы улучшить читаемость кода с Ил будет точно такой же:

Шаг2:

Убрать лишние вызовы методов пользуясь расширение метод .Метода singleordefault(..):

 internal void ShiftSwapInstrument(SwapCurve shiftedCurve, string swapToShift) 
{
var rateToShift = shiftedCurve.Swaps.SingleOrDefault(r => r.Description() == swapToShift)
if (rateToShift == null)
{
throw new PdhSwapRateNotFoundException(swapToShift);
}
rateToShift.Rate = rateToShift.Rate + 1 / 10000.0;
}

1
ответ дан 7 октября 2011 в 09:10 Источник Поделиться