Edit: Учитывая отредактированный вопрос, это много проще.
Опять же он использует метод расширения, но теперь нет необходимости делать преобразование в методе.
var myVariable = ParseNDecimal(xml.Element("myElement").ValueOrDefault("0"));
...
public static string ValueOrDefault(this XElement element,
string defaultValue)
{
return element != null ? element.Value : defaultValue;
}
Если вам не нравится метод, принимая строковый параметр, вы можете сделать это взять object
и вызвать ToString
, а затем вызвать его так:
var myVariable = ParseNDecimal(xml.Element("myElement").ValueOrDefault(0m));
однако, что чувствует себя немного неправильно для меня. Он предполагает, что синтаксический анализ будет обратным форматом ToString
.
Оригинальный ответ
Там нет ничего особенно на языке, чтобы помочь вам. (Я не уверен, что у вас есть точный код право - вы не значит, что-то с XAttribute
?) Я предлагаю писать служебный метод:
var myVariable = xml.Element("myElement").ValueOrDefault(0m);
...
public static decimal ValueOrDefault(this XElement element,
decimal defaultValue)
{
return element != null ?(decimal) element.Value : defaultValue;
}
Если изменить код в вопрос, я сделаю аналогично для кода здесь. Я подозреваю, что вы сделал означает использовать XAttribute
, что приводит к проблеме с дженериками - я не написал выше в общих чертах, потому что я считаю, что вы захотите позвонить оператору «преобразование в десятичный» . Общий прилив не будет делать этого, поскольку он не знает, какое преобразование вы хотите во время компиляции. Вы можете, однако, перегрузить вышеуказанный метод для всех интересующих вас типов результатов.
«условный», а не «тернарный» оператор –
Это утверждение слишком длинное. Независимо от того, какой синтаксис вы выберете, вы должны разделить его. –