Autor Beitrag
ebber
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Mo 26.01.09 11:21 
Hallo,

ich habe in meinem Programm eine Klasse mit mehreren Properties. Diese sollen ungefähr so aussehen:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 26.01.09 11:32 
ausblenden C#-Quelltext
1:
return String.IsNullOrEmpty(_SubTitle) ? String.Empty : _SubTitle;					

Und noch etwas kürzer geht es so:
ausblenden C#-Quelltext
1:
return _SubTitle ?? String.Empty;					

Siehe SDK-Doku/MSDN Operator ?? (C#-Referenz)

Gruß Jürgen
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: 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 :

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 26.01.09 12:48 
Wenn du das wirklich sauber haben willst, solltest du dir einmal AOP, zB mit PostSharp, ansehen. Damit kannst du dir ein eigenes DefaultValueAttribute (den Namen gibts leider schon in ComponentModel ;( ), das den Code injiziert, wenn es so verwendet wird:
ausblenden C#-Quelltext
1:
2:
[DefaultValue("")]
public string Titlee { get; set; }

_________________
>λ=
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 26.01.09 15:09 
Ersetze die new-Aufrufe mit so etwas z.B.:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: 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