Bearbeiten: Angesichts der bearbeiteten Frage ist dies viel einfacher.
Es verwendet wieder eine Erweiterungsmethode, aber jetzt ist es nicht mehr nötig, eine Umwandlung in der Methode durchzuführen.
var myVariable = ParseNDecimal(xml.Element("myElement").ValueOrDefault("0"));
...
public static string ValueOrDefault(this XElement element,
string defaultValue)
{
return element != null ? element.Value : defaultValue;
}
Wenn Ihnen die Methode mit einem String-Parameter nicht gefällt, könnten Sie sie als object
deklarieren und ToString
aufrufen, um sie dann wie folgt aufzurufen:
var myVariable = ParseNDecimal(xml.Element("myElement").ValueOrDefault(0m));
Allerdings fühlt sich das für mich ein wenig falsch an. Es geht davon aus, dass das Parsen das Gegenteil des ToString
-Formats sein wird.
Ursprüngliche Antwort
Es gibt nichts Besonderes in der Sprache, um Ihnen zu helfen. (Ich bin mir nicht sicher, ob Sie den genauen Code richtig haben - meinen Sie nicht etwas mit einem XAttribute
?) Ich würde vorschlagen, eine Hilfsmethode zu schreiben:
var myVariable = xml.Element("myElement").ValueOrDefault(0m);
...
public static decimal ValueOrDefault(this XElement element,
decimal defaultValue)
{
return element != null ?(decimal) element.Value : defaultValue;
}
Wenn Sie den Code in der Frage anpassen, werde ich das Gleiche für den Code hier tun. Ich vermute, Sie haben tatsächlich XAttribute
verwenden wollen, was zu einem Problem mit Generics führt - ich habe das obige nicht auf generische Weise geschrieben, weil ich glaube, dass Sie den "Umwandlungsoperator in Decimal" des XAttribute
anrufen wollen. Ein generischer Cast wird das nicht tun, da er zur Kompilierzeit nicht weiß, welche Art von Umwandlung Sie möchten. Sie können jedoch die obige Methode für alle Ergebnistypen überladen, die Sie interessieren.