ReadOnlyList作为两个列表的组合

问题描述:

我有两个列表在我的班级,我想公开一个列表作为ReadOnlyCollectoin这是两个列表的组合。ReadOnlyList作为两个列表的组合

我正在寻找达到此目的的最佳方法。到目前为止,我有两个选择

选项#1

public ReadOnlyCollection<Item> AllItems 
    { 
     get 
     { 
      var list = new List<Item>(); 
      list.AddRange(List1); 
      list.AddRange(List2); 
      return list.AsReadOnly(); 

     } 
    } 

选项#2

让我的两个列表ObservableCollections,每次被修改,修改第三私有列表。 ,然后将第三个列表公开为ReadOnlyCollection。

可能是我在这里错过了一些微不足道的东西。必须有更好的方法来实现这一点。

+0

如果你喜欢这样的事情,你可能更愿意写Option#1 getter作为“return List1.Concat(List2).ToList()。AsReadOnly()”。 – Scroog1 2012-04-27 14:31:13

取决于AllItems在您的应用程序中被调用的频率以及这两个列表的大小。

如果这些设置很小,AllItems将很少被调用,那么Option1就足够了。

如果这些列表将快速增长并且AllItems经常使用,则option2是最佳选择。

您的选择#1看起来像是一个很好的解决方案。

没有“一些微不足道的东西”,你错过了。

+0

同意Oded选项#1非常好 – Likurg 2012-04-27 14:27:43

您可以通过实现IList并访问List1.Concat(List2)来编写自己的ReadOnlyCollection版本,该版本不会生成列表的副本。然而,这可能是为了你的目的矫枉过正。