2011-12-16 88 views
3

我有一堆重複的代碼看起來像這樣:定義這種擴展方法的缺點是什麼?

If mValue is Nothing Return "" 
Return mValue.ToUpper 

我定義了以下擴展方法,以減少重複代碼:

<System.Runtime.CompilerServices.Extension()> 
Public Function EmptyIfNull(this As String) As String 
    If String.IsNullOrEmpty(this) Then Return "" 
    Return this 
End Function 

重複的代碼可以改寫爲:

Return mValue.EmptyIfNull.ToUpper 

這是否有缺點?

+0

我不這麼認爲。你仍然使用string.IsNullOrEmpty(),沒有更多。是的,我可以看到一個好處,你可以在沒有任何條件和其他條件的情況下在單個語句中使用它。 – 2011-12-16 16:05:09

回答

2

唯一的缺點是,你基本上重現什麼已經在語言(空合併運算符,或If function,因爲它在VB.NET實現真實)

Return If(mValue, "").ToUpper() 

應該做你在找什麼對於。

至於你的擴展方法,沒有必要撥打String.IsNullOrEmpty,因爲你只需要處理它的情況下,它的Nothing

+0

從代碼可讀性的角度來看,我更喜歡`mValue.EmptyIfNull.ToUpper`。 – 2011-12-16 16:03:34

1

不,這樣做沒有缺點。該方法很簡單,它涵蓋了一個合法的用例,並且名稱很好。

這裏要考慮的唯一事情是你如何真正使用它:也許它會拋出一個ArgumentNullException(更合適的類型或其他異常)如果mValuenull更合適 - 但是這取決於調用者。

+0

我同意。在許多情況下,最好先確保該值不爲空,這樣在之後的任何地方都不需要調用EmptyIfNull。 – 2011-12-16 16:06:16

0

很容易理解它的功能(這是最重要的)。

它也生產更乾淨的代碼。