關閉我的頭頂,我能想到的4種方式檢查null參數:測試前提條件的不同方法的優缺點?
Debug.Assert(context != null);
Contract.Assert(context != null);
Contract.Requires(context != null);
if (context == null) throw new ArgumentNullException("context");
我一直使用的最後一個方法,但我剛纔看到的代碼片段使用Contract.Requires
,我不熟悉。 每種方法的優缺點是什麼?有其他方法嗎?
在VS2010 W/ReSharper的,
Contract.Assert
警告我說,表達始終是真實的(它是如何知道的,我不太清楚......不能HttpContext的爲空? ),Contract.Requires
被淡化了,它告訴我的編譯器不會調用的方法(我假設,因爲前者的原因,它永遠不會爲空),並- 如果我改變的最後選擇
context != null
所有代碼如下翅膀漸漸消失,它告訴我代碼是啓發式無法達到的。
因此,看起來最後3種方法有一些內置到VS靜態檢查器中的智能,而Debug.Assert
是愚蠢的。
問題不明確。你是否真的試圖一次全部使用它們? – 2010-12-15 01:22:59
@Matthew:不知道這怎麼不清楚......不,我沒有試圖一次性使用它們。我做了一個類似的代碼片段來說明你可以檢查null的不同方式。 – mpen 2010-12-15 02:59:22
這就是我從問題的其餘部分想到的,但是你使用的語法呈現很奇怪。 – 2010-12-15 03:06:00