2010-11-11 100 views
5

剛發現Console.WriteLine可以正確處理null字符串 像Console.WriteLine((string)null);Console.WriteLine正確處理空字符串

我可以假設大多數類庫正確地處理空引用嗎?

+0

順便說一句,在你描述的情況下,什麼_ incorrectling正確_意味着什麼?寫'空'或''? – 2010-11-11 08:14:57

+3

不錯,三個答案,是的,不,也許。 :) – 2010-11-11 08:19:38

+0

@jb - 願最好的人贏得:)。 – 2010-11-11 08:22:04

回答

4

嗯......是的。

您可以預期(幾乎)所有類都將正確處理空引用。

但是,我覺得你的「正確」意思與該作者的意思不同。

例如,如果您嘗試打開文件並通過null打開文件的路徑,它不會默默失敗,它會引發異常。

如果這就是你所說的「正確處理」的意思,那麼當然可以。實際上,我希望所有類都能正確處理空引用。

但是不要指望程序就像沒有發生一樣。

10

這充分取決於你調用的方法。當您通過null時,請參閱每種方法的MSDN文檔。

當調用別人的API或庫時,對null進行假設是不安全的,特別是如果您沒有將其源代碼用作參考時。始終閱讀文檔。如果文檔不說,代碼防守。

但是,庫方法的編程方式是,當它們不接受null時,它們會拋出一個異常,告訴您它不是有效的參數。

+0

對。在調用別人的API或庫時,對null進行假設是不安全的,特別是如果您沒有將其源代碼用作參考。始終閱讀文檔。如果文檔不說,代碼防守。 – 2010-11-11 08:12:54

+0

@Mike Clark - 確實如此。感謝您的補充,更新了答案。 – 2010-11-11 08:14:33

0

完全取決於「正確」和「方法」本身的含義。除非你的意思是「可以拋出一個異常,因爲它期待一個實際的字符串」,否則不。

0

通常,當參數(無論是字符串還是任何其他類型)都需要做某事時,該方法通常會在異常時崩潰,當該參數爲null時。

幾個例子:

  1. 文件..無法打開 「空」 的文件等 - >錯誤。
  2. 解析 - >不能解析「null」,所以 - >錯誤。 (是的,他們在2.0中加入的TryParse)

在另一方面,當參數不需要方法通常會「吞青蛙」時,它的空,把它當作一些默認值,例如空字符串。 在Console對象的WriteLine方法的情況下,它並不真的需要該字符串,它只是將它寫入控制檯,因此它不在乎它是否爲空。

所以和其他人說的一樣,它取決於您嘗試使用哪種方法,並且在嘗試傳遞空值之前更好地閱讀。