2013-11-04 51 views
3

我今天整形器安裝在我的電腦上檢查出來,每當我有以下我的代碼語句我從ReSharper的得到的信息是比較Null是沒有必要的。爲什麼?if語句是關鍵字和比較爲null

這是結:

if (dataGrid.ItemsSource != null && dataGrid.ItemsSource is DataGridCollectionView) 

我檢查,如果該類型是一個我希望它是,如果該值不Null

這是有道理的,我問這是因爲雖然值可能仍Null類型可能是真實的。我想我必須在關於這方面的文檔中丟失一些東西。

爲什麼重塑者說我不需要比較爲null?

我錯過了什麼?

回答

8

如果對象爲空,is運算符將始終返回false,因此在測試類型之前不需要檢查null。

documentation

An是表達式評估爲真,如果所提供的表達是非空,並且所提供的對象可以被強制轉換爲提供的類型而不會導致拋出異常。

3

dataGrid.ItemsSource is DataGridCollectionView指 「dataGrid.ItemsSource是DataGridCollectionView的實例」;如果它是一個(任何)實例,它不能爲空,所以空檢查是多餘的。

+0

所做的是關鍵字總是返回false當空?這是記錄在某處嗎? –

+0

是的,[是(C#參考)](http://msdn.microsoft.com/en-us/library/scekt9xw(v = vs.90).aspx):*如果提供的表達式是an表達式,則返回true是**非空**,並且.... * –

+0

是的,當值爲空時它總是返回false,因爲null不是任何類型的實例。請參閱http://msdn.microsoft.com/en-us/library/scekt9xw.aspx:*如果提供的表達式爲非空**,則表達式的計算結果爲真**,並且所提供的對象可以轉換爲提供的類型不會導致異常拋出。* –

2

null將始終從is測試返回false,所以null檢查沒有實現任何的is測試已經不這樣做。唯一瘋狂的邊緣情況哪裏,這可能胡作非爲是,如果你有這樣的連續調用返回不同的東西的屬性 - 所以,如果第一.ItemsSource返回一些東西到第二.ItemsSource很大的不同。這將是危險的和自我造成的。

+0

真的嗎?這是記錄在MSDN的某處嗎? –

+0

@devhedgehog IIRC,語言規範;部分7.9.10在MS版本 –

+0

@devhedgehog這裏是ECMA版本,http://www.jaggersoft.com/csharp_standard/14.9.9.htm:「如果e的值爲null,則結果爲false。」 –