2009-08-07 7 views
5

Ich habe eine Eigenschaft wie folgt deklariert:Gibt es eine bessere Möglichkeit, diese Zeile von C# -Code in C# 3.0 zu schreiben?

public decimal? MyProperty { get; set; } 

ich diesen Wert an eine andere Methode als String übergeben bin brauchen und so der einzige Weg, ich sehe so zu tun, ist wie folgt:

MyProperty == null ? null : MyProperty.ToString() 

Das sieht sehr unordentlich aus, wenn Sie eine Reihe ähnlicher Eigenschaften an eine Methode übergeben haben.

Weiß jemand, ob es eine bessere und prägnantere Schreibweise gibt?

Ach ja, und wenn jemand kann eine angemessenere Titel auf diese Frage denken Sie fühlen sich frei, es zu ändern ...

Antwort

15

Sie können verwenden Sie die Nullable<T>.ToString()override ...

var s = MyProperty.ToString(); // returns "" if MyProperty is null 
+0

Wow, wirklich? Habe etwas Neues gelernt. Ich hätte das nie ausprobiert und dachte, es würde eine Null-Zeiger-Ausnahme auslösen. – Paul

+0

Wow! Ich hatte keine Ahnung. ToString funktionierte immer noch für einen Nullwert, der null war. Das ist großartig! – mezoid

+0

... Aber es klingt wie der Autor wollte NULL haben, wenn der Wert NULL ist !! –

1

Sie HasValue anstelle des Vergleichs verwenden:

MyProperty.HasValue ? MyProperty.Value.ToString() : null; 
1

Make-String erhalten Eigenschaften für die Klasse die Eigenschaft enthält, und es wird nicht chaotisch wen Sie t erhalten müssen er String-Version.

public decimal? MyProperty { get; set; } 

    public string MyPropertyString 
    { 
     get 
     { 
      return MyProperty.HasValue ? MyProperty.Value.ToString() : null; 
     } 
    } 
1

Sie könnten eine Erweiterungsmethode auf Dezimal deklarieren.

public static string Str(this decimal? value) 
{ 
    return value == null ? null : MyProperty.ToString() 
} 

Sie es dann wie folgt aufrufen:

MyProperty.Str() 
+0

Nein. Sollte dezimal sein **? ** (Nullable) –

1

Wenn es in Ordnung ist Null istead von null zu haben, dann:

(MyProperty ?? 0).ToString() 

Andernfalls fügen Sie Erweiterungsmethode:

public static string AsString(this decimal? val) 
{ 
    return val == null ? null : val.Value.ToString(); 
} 

// Use: 
MyProperty.AsString() // This will NEVER cause NullReferenceException 
Verwandte Themen