2012-01-21 77 views
3

我最近在我的代碼中遇到了一個異常,因爲我正在修剪一個空字符串。 我將它替換爲以下內容:這個修剪代碼可能會失敗嗎?

SomeValue = (SomeString ?? "").Trim(); 

此代碼是否會失敗?

謝謝。

注:我知道我可以添加一個try/catch;我只是希望在不使用try/catch的情況下使這條線路具有防故障功能。

+0

你能寫一些小的單元測試來測試嗎? –

+0

我懷疑你的範圍內的答案是否定的,它不會失敗。正常操作失敗的唯一原因是內存不足。 –

+0

它以更加怪誕的方式失敗。它產生垃圾數據,你不會知道它。 –

回答

5

這不會失敗(即拋出NullReferenceException),假設SomeString確實是一個string

你可以達到同樣在許多方面:

SomeValue = (SomeString == null)?string.Empty:SomeString.Trim(); 
+0

好的,謝謝Oded。這是一個自定義json反序列化器的一部分,我在一個不能失敗的進程中出現錯誤。 – frenchie

+0

@frenchie - 當你編寫這樣的代碼時,考慮儘可能使它成爲_readable_。 – Oded

+1

@Oded,我會更精確一點:'這不會失敗(拋出一個NullReferenceException),因爲這個代碼可能會以其他方式失敗。 –

2

這不是我會這樣做的方式,但不是,現在不應該失敗。

我可能會寫一個擴展方法,在檢查null之後調用trim。事情是這樣的:

public static string NullTrim(this String str) { 
    if(str == null) { 
     return string.Empty; 
    } 
    return str.Trim(); 
} 

這使得所有的下列編譯和執行沒有錯誤:

"".NullTrim(); 
    " test ".NullTrim(); 
    ((string)null).NullTrim(); 
+0

好的,謝謝你的想法;目前我正在與我擁有的路線走。 – frenchie

2

那麼,如果有人因爲NullReferenceException失敗,那麼現在肯定不會失敗因爲的。至於其他方面,我不能說沒有背景。