2014-01-25 2 views
-2

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

public ..... CreateOrder(....., string rawSourceAmount) 
{ 
    decimal? sourceAmount2 = rawSourceAmount. 
     TryToDecimal(XUtils.DecimalFormat(2)); // extension method, wrapper of Decimal.TryParse, returns null if fails 
    if (sourceAmount2 == null) 
     throw new XBadSourceAmountException(
      sourceSystem.Id, rawSourceAmount); 
    decimal sourceAmount = sourceAmount2.Value; 

    .......... 
} 

Почему у меня есть sourceAmount2 и sourceAmount? Потому что позже в теле метода я активно использую sourceAmount, и я не хочу каждый раз писать sourceAmount.Value. Есть ли способ упростить этот шаблонный код?

Итак, задача такова: у меня есть string rawSourceAmount. Мне нужно decimal sourceAmount и место, где можно различить исключение. Мне не нужен sourceAmount2.

ответ

1

Затем измените тип возвращаемого из TryToDecimal method.Make bool и так ли добавить выходной параметр в ваш метод, то вы можете проверить результат возвращения напрямую, вам не нужно определить дополнительный обнуляемый переменную:

decimal sourceAmount; 
if(!rawSourceAmount.TryToDecimal(XUtils.DecimalFormat(2),out sourceAmont) 
{ 
    throw new XBadSourceAmountException(
     sourceSystem.Id, rawSourceAmount); 
} 
+0

Спасибо. Уже сделали тот же код после сообщения @pid. – Denis

Смежные вопросы