Entwickler-Ecke
Basistechnologien - Property-Get-Set-Code verkürzen
ebber - Mo 26.01.09 11:21
Titel: Property-Get-Set-Code verkürzen
Hallo,
ich habe in meinem Programm eine Klasse mit mehreren Properties. Diese sollen ungefähr so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private string _SubTitle; public string SubTitle { get { if (_SubTitle == null) return ""; else return _SubTitle; } set { _SubTitle = value; } } |
Also im Prinzip nur wenn die Eigenschaft null ist einen Standardwert zurückgeben.
Mein Problem ist, dass ich ca. 30 dieser Dinger habe. Darum wäre das wohl ein bisschen viel Code für fast nix. Kann ich das irgendwie besser schreiben?
MfG
JüTho - Mo 26.01.09 11:32
C#-Quelltext
1:
| return String.IsNullOrEmpty(_SubTitle) ? String.Empty : _SubTitle; |
Und noch etwas kürzer geht es so:
C#-Quelltext
1:
| return _SubTitle ?? String.Empty; |
Siehe
SDK-Doku/MSDN Operator ?? (C#-Referenz)
Gruß Jürgen
ebber - Mo 26.01.09 12:21
Danke, daran hatte ich jetzt gar nicht gedacht.
Mein erster Gedanke lag irgendwie in einer komplett anderen Lösung. Aber sollte sich die nicht finden, werden ich das dann so machen.
Jetzt habe ich so eine Liste :
C#-Quelltext
1: 2: 3:
| public string Titlee { get; set; } public string SubTitle { get; set; } ... |
So müsste ich dann die ganzen get und set ausformulieren. Würde das vielleicht auch irgendwie ohne gehen?
Oder irgend welche anderen Vorschläge noch?
Kha - Mo 26.01.09 12:48
Wenn du das wirklich sauber haben willst, solltest du dir einmal AOP, zB mit
PostSharp [
http://www.postsharp.org], ansehen. Damit kannst du dir ein eigenes DefaultValueAttribute (den Namen gibts leider schon in ComponentModel ;( ), das den Code injiziert, wenn es so verwendet wird:
C#-Quelltext
1: 2:
| [DefaultValue("")] public string Titlee { get; set; } |
ebber - Mo 26.01.09 14:30
Danke, aber etwas externes möchte ich dann auch nicht verwenden. Dann scheint mir wohl die oben genannte Lösung die beste.
Aber vielleicht könnte man mein Problem auch anders lösen. Hier tritt es nämlich auf:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| private bool Save(List<Film> ls, string file) { XElement fi = new XElement("Films", from f in ls select new XElement("Film", new XAttribute("Title", f.Titl), new XAttribute("SubTitle", f.SubTitle), ...));
fi.Save(file); return true;
} |
Wenn eine dieser Eigenschaften die ich speichern möchte null ist kommt der Fehler. Deshalb mein Idee, dass ich das im get ändere. Aber vielleicht ginge das ja auch irgendwie hier in dem LINQ Ding?
Kha - Mo 26.01.09 15:09
Ersetze die new-Aufrufe mit so etwas z.B.:
C#-Quelltext
1: 2: 3: 4:
| XAttribute CreateAttribute(XName name, object value) { return value == null ? null : new XAttribute(name, value); } |
PS: Spricht etwas gegen XML-Serialisierung?
ebber - Mo 26.01.09 16:06
Habe ich irgendwie nicht gewusst, dass es XML-Serialisierung gibt. Scheint wohl noch einfacher als Einfach zu sein. Dann werde ich das mal testen. Danke.
MfG
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!