2009-08-07 33 views
5

我有一個屬性聲明如下:有沒有更好的方式在C#3.0中編寫這行C#代碼?

​​

我需要這個值傳遞給另一個方法爲一個字符串,所以我認爲這樣做的唯一方式,以便如下:

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

當傳遞給方法的許多類似屬性時,這看起來很亂。

有誰知道是否有更好更簡潔的寫作方式?

哦,如果有人能想到一個更合適的標題的這個問題請隨時改變它...

回答

15

你可以使用Nullable<T>.ToString()override ...

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

哇,真的嗎?學到了新東西。我永遠不會嘗試,認爲它會拋出空指針異常 – Paul 2009-08-07 04:35:33

+0

哇!我不知道.ToString仍然工作爲空的空值。棒極了! – mezoid 2009-08-07 04:36:20

+0

...但它聽起來像作者想要NULL,如果值是NULL !! ?? – 2009-08-07 05:44:20

1

你可以使用,而不是比較的HasValue:

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

製作繩獲得包含屬性的類屬性,它不會亂文,你需要得到ŧ他字符串版本。

public decimal? MyProperty { get; set; } 

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

您可以在Decimal上聲明擴展方法。

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

你再這樣稱呼它:

MyProperty.Str() 
+0

否應該用十進制** **(可爲空) – 2009-08-07 05:30:51

1

如果確定有零istead空的,那麼:

(MyProperty ?? 0).ToString() 

否則添加擴展方法:

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

// Use: 
MyProperty.AsString() // This will NEVER cause NullReferenceException 
相關問題