2009-08-07 28 views
5

Aşağıdaki gibi bildirilen bir özelliğim var:C# kod C# 3.0 satırında yazmak için daha iyi bir yolu var mı?

public decimal? MyProperty { get; set; } 

Bu değeri bir dize olarak başka bir yönteme aktarmaya ihtiyacım var ve bunu yapmak için gördüğüm tek yol şu şekildedir:

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

Bir yönteme aktarılan benzer özelliklere sahip olduğunuzda bu çok karışık görünüyor.

Bunu yazmanın daha iyi ve daha özlü bir yolu olup olmadığını bilen var mı?

Oh, ve eğer herkes bu soru için daha uygun bir başlık düşünebilirse, lütfen onu değiştirmekten çekinmeyin ...

cevap

15

yapabilirsiniz Eğer t almak gerekir özelliğini içeren sınıfına özelliklerini almak Nullable<T>.ToString()override ...

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

Vay, gerçekten mi? Yeni bir şey öğrendin. Bunu asla denemedim, boş bir işaretçi istisnası atmayı düşünürdüm – Paul

+0

Vay canına! Hiçbir fikrim yoktu .ToString hala null değere sahip null değeri için çalıştı. Bu harika! – mezoid

+0

... Ama değer NULL ise yazar NULL sahip olmak istediği gibi geliyor! .NET –

1

yerine karşılaştırma HasValue kullanabilirsiniz:

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

yap dizeyi kullanın ve wen dağınık olmayacak o dize sürümü.

public decimal? MyProperty { get; set; } 

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

Ondalık bir uzantı yöntemi bildirebilirsiniz.

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

Sonra böyle diyoruz:

MyProperty.Str() 
+0

No. Ondalık olmalı **? ** (Nullable) –

1

o zaman boş sıfır Istead olması tamamsa:

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

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

(MyProperty ?? 0).ToString() 

Aksi uzatma yöntemi eklemek

İlgili konular