2011-06-13 16 views
0

我有這個類:使用數組或IEnumerable的一個細節類

public class TextFiller 
{ 
    public HtmlText Text { get; set; } 
    public string Details { get; set; } 
} 

我需要的是建立一個父類,將包含許多TextFillers的。我想知道這樣做的最好方法。最好使用我在線a,b線上做的或者有更好的解決方案嗎?

public class TextFillerParent 
{ 
    public TextFiller[] TextFiller { get; set; } <<< a 
    public IEnumerable<TextFiller> TextFiller { get; set; } <<< b 
} 

我將要做的是將數據存儲在Azure中,因此我希望能夠將TextFillerParent序列化爲JSON字符串。如果TextFillerParent的內容是TextFiller的數組,或者如果我使用IEnumberable,會有什麼區別嗎?使用IEnumerable有沒有優勢?

我必須能夠設置單個TextFiller的值。我知道我可以用一個數組來做到這一點,但如果我使用IEnumerable,或者IEnumerable只適用於順序訪問,我也可以這麼做嗎?

謝謝。

+1

數組必須始終爲arry,而IEnumerable可以是數組,List,Collection或實現IEnumerable的任何其他類型......哪個更易於使用? – Will 2011-06-13 16:47:25

+0

但是,如果我想要使用數組,那麼我不必像在行(a)中那樣在TextFillerParent中定義它。你提到的IEnumerable可以是一個數組。我怎樣才能將IEnumerable設置爲一個數組,並真的有所作爲?謝謝 – Emily 2011-06-13 16:53:52

+0

它在可用性方面略有不同。在評論中有一點需要解釋。但想想這樣..如果我使用你的班級,我有一個名單,你需要一個TextFiller []然後我必須將列表轉換爲一個數組。如果你使用任何枚舉,我可以傳入一個List,一個數組或任何其他實現了IEnumerable 的類型。 – Will 2011-06-13 18:46:22

回答

3

如果您需要訪問單個項目,您可能希望使用IList的泛型版本。我會推薦它通過陣列。

此外,使用LINQ,您可以從IEnumerable對象中獲得比順序訪問更多的功能。

+1

爲什麼IList的通用版本(不確定是什麼)比數組好? – Emily 2011-06-13 16:52:25

+0

因爲IList 可以是實現IList的任何東西,它允許索引,元素添加和刪除等等。一個數組對於必須限制集合長度的情況非常適用,但是當你不需要時,它是不必要的阻礙。 – KeithS 2011-06-13 16:55:14

+1

@Emily - IList比數組更好,因爲它可以給你類似的功能,但是對你使用的實際類型的約束更少。數組是具體的實現。最好儘可能使用接口,以便您的代碼不受任何特定實現的約束。 – 2011-06-13 16:59:46

0

我會用你在b上說的IEnumerable版本。它允許使用泛型進行更多控制,並且對序列化也很有用。

+0

是的,但另一個人在這裏說只有在我不需要索引它時才使用IEnumerable,這是一個需求。 – Emily 2011-06-13 17:05:48

0

泛型:public IEnumerable<TextFiller> TextFiller { get; set; }

給你一個友好/多種類型的安全接口,用於添加,刪除,搜索,等等。只要你的屬性(文本,細節)保持公開,那麼它們將是可序列化的。

你可以做任何列表訪問單個TextFiller:

var thisItem = MyList[2]; 

var thisItem = MyList.Find(AddressOf anotherObject); 

這裏的另一個帖子裏面佔地陣列泛型的一些好處。

Generics vs. Array Lists


var Parent = new TextFillerParent(); 
    Parent.TextFillers.Add(new TextFiller { ..}); 
    Parent.TextFillers.Add(new TextFiller { ..}); 

    if(Parent.TextFillers[1] != null) 
    { 
     var child = Parent.TextFillers[1]; 
    } 
+0

如果您有一分鐘可以向我展示如何創建TextFillerParent,然後向其中添加兩個TextFiller對象。然後我如何訪問第二個TextFiller對象。 – Emily 2011-06-13 16:56:46

+0

我將代碼添加到上面我的答案的底部:) – christofr 2011-06-13 17:05:23

+0

對不起,但我在這裏感到困惑,因爲另一個人說「如果你不需要索引它,就會聲明它爲IEnumerable。 ,請嘗試使用IList「你是說不使用IList? – Emily 2011-06-13 17:08:27

0

我將宣佈它作爲一個IEnumerable,如果你並不需要能夠索引它。如果是這樣,請嘗試使用IList(從通用IEnumerable繼承)。

之所以完全如Will所說;數組必須始終是一個數組。您可以通過它進行索引和枚舉,但是無法添加,刪除等,而無需滾動您自己的extendo-Array代碼。

相比之下,使用IEnumerable可以讓你使用任何實現該接口的東西,這大大拓寬了候選字段;所有你關心的是,無論被引用的是什麼,都可以被枚舉,除了實際可枚舉類型可以做的其他事情之外。

+0

什麼是我使用ILIST的語法。這是非常重要的,我可以索引它。我也想能夠添加到集合中。 – Emily 2011-06-13 16:58:25

+0

如果它是一個ILIST我可以序列化它像一個數組? – Emily 2011-06-13 16:59:35

相關問題