零點如果我有一個數組或泛型列表,甚至一本字典,我想先做一些檢查,看看如果對象是有效的,做我:檢查有關集合的
- 檢查null
- 只是檢查someCollection.count> 0
- 都
不要我檢查null,則檢查次數或檢查次數不夠好,我並不需要先檢查空?
我和OOP和C#的問題經常是知道什麼時候檢查空值而只是依賴收集。如果它爲空,那麼如果返回null,並且說你試圖通過屬性返回一個itemin集合作爲示例,那麼返回什麼。
零點如果我有一個數組或泛型列表,甚至一本字典,我想先做一些檢查,看看如果對象是有效的,做我:檢查有關集合的
不要我檢查null,則檢查次數或檢查次數不夠好,我並不需要先檢查空?
我和OOP和C#的問題經常是知道什麼時候檢查空值而只是依賴收集。如果它爲空,那麼如果返回null,並且說你試圖通過屬性返回一個itemin集合作爲示例,那麼返回什麼。
您無法檢查空集合上的Count。
空集合和空集合是兩個不同的東西。所以你應該檢查兩者,否則總是初始化你的集合,所以你永遠不會遇到空問題。或者,對於簡單的解決方案,只需返回一個新的集合,然後讓您的調用代碼處理計數檢查。
List<Type> someCollection = new List<Type();
if(someCollection == null)
return new List<Type>();
計數不適用於空對象。
下面是一些鍋爐板代碼,你可以使用:
Debug.Assert(collection != null);
Debug.Assert(collection.Count > 0);
if (collection == null) {
throw new ArgumentNullException("collection");
}
if (collection.Count == 0) {
throw new ArgumentException("collection should have at least one member");
}
斷言是非常重要的,應該被更多的.Net開發者來實現。
早期編譯可能是編寫健壯代碼的關鍵。如果有任何參數表示您正在編寫的方法不應被傳遞,那麼最好在此時崩潰,而不是將損壞的數據寫入數據庫。
您還需要一個健壯的日誌記錄機制,以便您記錄所有正在發生的令人討厭的事情。
當您控制這些集合的創建時,您可以使您的API更易於使用從不返回null。如果沒有元素,只需返回一個空集合。如果性能是一個問題,您可以創建一個靜態實例並始終返回該實例,或使用EmptyEnumerator。
是的,表現是一個問題。我們是一家電子商務網站,每個月可以獲得500,000次獨特點擊率 – PositiveGuy 2009-11-24 22:54:26
那麼如果這個調用代碼是在你的標記?我不想在我的標記中使用一堆邏輯來進行計數檢查等,但引用此屬性的方法需要返回對象,無論它是否爲空。如何處理這是我的痛點。 – PositiveGuy 2009-11-24 22:53:39
你是說你的財產需要支持領域?然後正是我所建議的,並將後臺字段初始化爲列表的新實例。 – Brandon 2009-11-24 23:12:29