2009-08-07 12 views
5

Mam właściwość zadeklarowana następująco:Czy istnieje lepszy sposób zapisu tej linii kodu C# w C# 3.0?

public decimal? MyProperty { get; set; } 

mam potrzeby przekazać tę wartość do innej metody jako ciąg i tak jedyny sposób widzę, aby to zrobić to w następujący sposób:

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

To wygląda bardzo niechlujnie, gdy wiele podobnych właściwości jest przekazywanych do metody.

Czy ktoś wie, czy istnieje lepszy i bardziej zwięzły sposób zapisu tego?

Aha, i jeśli ktoś może myśleć o bardziej odpowiednim tytułem na to pytanie proszę nie krępuj się to zmienić ...

Odpowiedz

15

Można użyj Nullable<T>.ToString()override ...

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

Wow, naprawdę? Nauczyłem się czegoś nowego. Nigdy bym tego nie spróbował, myśląc, że rzuci wyjątek o wartości zerowej – Paul

+0

Wow! Nie miałem pojęcia .ToString nadal pracował dla zerowej wartości, która była zerowa. To cudownie! – mezoid

+0

... Ale brzmi to tak, jakby autor chciał mieć wartość NULL, jeśli wartość jest NULL !! ?? –

1

Można użyć hasValue zamiast porównania:

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

Dokonaj ciąg uzyskać właściwości na klasy zawierające własność i nie będzie bałagan wen trzeba dostać t on wersję smyczkową.

public decimal? MyProperty { get; set; } 

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

Można zadeklarować metodę przedłużania na dziesiętnym.

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

Następnie nazwać tak:

MyProperty.Str() 
+0

No. Powinno być na dziesiętnym **? ** (Nullable) –

1

Jeśli jest OK, aby mieć zerową istead null następnie:

(MyProperty ?? 0).ToString() 

przeciwnym razie dodać metodę rozszerzenia:

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

// Use: 
MyProperty.AsString() // This will NEVER cause NullReferenceException 
Powiązane problemy