2014-03-12 107 views
1

我有一個通過實體框架從數據庫中獲取值的類型實體列表。如果一個空的結果集返回爲空或爲空列表,如下圖所示:我應該返回一個空列表還是空列表?

private List<Order> _myOrders; 
    public List<Order> myOrder 
    { 
     get 
     { 
      return this._myOrders ?? new List<Order>(); 
     } 
     set 
     { 
      this._myOrders = value; 
     } 
    } 

任何處理代碼會使用,而不是一個測試表的計數()「!= NULL」?什麼被認爲是更好的做法。我懷疑有人應該嘗試管理房產中的空值,否則一個人會在整個地方寫空測試代碼。

想法?

謝謝。

+3

看看這個:http://stackoverflow.com/questions/1626597/should-functions-return-null-or-an-empty-object – pqvst

回答

7

我會傾向於返回一個空的列表。

在概念級別,null表示未知。在你的情況下,與客戶相關的訂單不是未知數;相反,沒有訂單。一個空的列表代表這是精確的,而空是不精確的,可能是模棱兩可的 - 「空」的訂單是不是意味着沒有訂單或只是訂單屬性尚未填充?

在實際操作中,通過返回一個空列表,對訂單進行計算的代碼可能需要較少的邊角檢查。例如,使用foreach遍歷訂單列表的方法應該適用於零長度的訂單列表(不會發生迭代),而在沒有訂單的情況下使用null將需要該方法進行安全檢查。

+1

謝謝你。非常有見地。剛纔看到另一個SO,MS設計指南實際上建議返回空列表而不是空值。所以我今天學到了一些東西! – SamJolly

1

我不同意本;儘管基於廣泛接受的理論,他有一個很好的觀點。儘管使用null返回的錯誤處理較少,但我更喜歡使用空列表,因爲對我來說,這似乎是對資源的浪費使用。當然,這是一個非常偏好的場景。再次,它的確基於您的應用程序的整體設計。您是否打算對該列表做任何事情,而不管它是空的?如果是這樣,那麼null就不會成爲一條路。您必須決定簡單的.count()檢查的易用性是否超過了您需要編寫的用於檢查空值以節省資源的額外代碼行。至於多少資源節約會有 - 我不知道。考慮到你需要執行額外的空值檢查,你正在爲週期交易內存。

拿我說的一粒鹽。我只做了一年的編程。

+0

感謝您的評論。關於資源的有趣點,但我想我會運行MS設計指南... – SamJolly

+0

@SamJolly我同意,山姆。我只是想提供一個不同的視角。從閱讀MS指南,框架設計指南第二版和http://stackoverflow.com/a/1970001/2006048,我的知識在哪裏很清楚。 :) –

+0

雖然剛剛讀了第一篇SO,但還是有很多空的protoganists!我爲什麼看起來! :) – SamJolly