2009-08-07 3 views
5

Ho una proprietà dichiarata come segue:C'è un modo migliore per scrivere questa riga di codice C# in C# 3.0?

public decimal? MyProperty { get; set; } 

Sto dovendo passare questo valore a un altro metodo come una stringa e quindi l'unico modo che vedo per farlo è la seguente:

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

Sembra molto caotico quando si passa un certo numero di proprietà simili in un metodo.

Qualcuno sa se c'è un modo migliore e più conciso di scrivere questo?

Oh, e se qualcuno può pensare ad un titolo più appropriato a questa domanda non esitate a cambiarlo ...

risposta

15

Puoi utilizzare il ...

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

Wow, davvero? Ho imparato qualcosa di nuovo. Non l'avrei mai provato, pensando che avrebbe gettato un'eccezione di puntatore nullo – Paul

+0

Wow! Non avevo idea. ToString funzionava ancora con un valore nullable che era nullo. È fantastico! – mezoid

+0

... Ma sembra che l'autore abbia voluto NULL se il valore è NULL !! ?? –

1

Si potrebbe utilizzare HasValue al posto del confronto:

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

stringa Marchio Nullable<T>.ToString()override ottenere le proprietà sulla classe che contengono la proprietà e non sarà disordinato wen è necessario per ottenere t lui stringa la versione.

public decimal? MyProperty { get; set; } 

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

È possibile dichiarare un metodo di estensione su Decimale.

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

È quindi chiamare in questo modo:

MyProperty.Str() 
+0

No. Dovrebbe essere in decimale **? ** (Nullable) –

1

Se è ok per avere lo zero istead di null allora:

(MyProperty ?? 0).ToString() 

Altrimenti aggiungere metodo di estensione:

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

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