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。
可能是我在这里错过了一些微不足道的东西。必须有更好的方法来实现这一点。
答
取决于AllItems在您的应用程序中被调用的频率以及这两个列表的大小。
如果这些设置很小,AllItems将很少被调用,那么Option1就足够了。
如果这些列表将快速增长并且AllItems经常使用,则option2是最佳选择。
答
您可以通过实现IList并访问List1.Concat(List2)来编写自己的ReadOnlyCollection版本,该版本不会生成列表的副本。然而,这可能是为了你的目的矫枉过正。
如果你喜欢这样的事情,你可能更愿意写Option#1 getter作为“return List1.Concat(List2).ToList()。AsReadOnly()”。 – Scroog1 2012-04-27 14:31:13