Редактировать: Учитывая отредактированный вопрос, это намного проще.
Снова используется метод расширения, но теперь нет необходимости выполнять преобразование в методе.
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
, что приводит к проблеме с генериками - я не написал вышеприведенное обобщенно, потому что я полагаю, что вы захотите вызвать XAttribute
преобразование в десятичный "оператор. Обычное приведение не сделает этого, так как не знает, какое преобразование вы хотите во время компиляции. Однако вы можете перегрузить вышеуказанный метод для всех интересующих вас типов результатов.