复杂的集合改为类 - 处理它的最佳方式

时间:2010-03-17 16:52:39

标签: c# collections

在我的项目中,我使用了非常复杂(和嵌套)的集合:

List<Pair<List<Pair<double>>, double>> myCollection

当我在项目的几个地方以同样的方式使用它时,我想将它转换为新类。但我有些疑惑......

处理此类集合的最佳方法是什么,创建内部字段并仅作为公共选定项目传递:

public class MyComplicatedCollection
{
    private List<Pair<List<Pair<double>>, double>> myInnerCollection = null;

    // Here come some constructors, data accessors etc... only to those elements which I would like to pass as public.
}

或者以其他方式,通过推导原始集合:

public class MyComplicatedCollection : List<Pair<List<Pair<double>>, double>>
{

    // Here come some constructors, 
    // Most of the data accessors are given "out of the box"
}

第二种方式似乎更容易,但不像第一种方式那样安全。另一件事是性能 - 这些集合非常大,我需要快速访问它 - 这是至关重要的。

第二个问题:如果第二种方式更好......对于List,有一个构造函数可以通过传递任何ICollection来填充您的集合。有没有简单的方法为我的类创建这样的构造函数,或者我需要逐个元素(或使用AddRange方法)填充我的集合元素?

2 个答案:

答案 0 :(得分:2)

如有疑问,请使用成分。继承很难做到,只有当必须在新类型和基础/组合类型之间存在IS-A关系时,才应该使用它。在这种情况下,我认为组合(即你的第一个例子)是最好的解决方案。

组合使您可以灵活地使用您想要的任何公共接口来构建您的类型。继承决定了你的接口,并在你的新类型和它的基类型之间创建了一个紧密耦合,这可能使未来的修改变得困难。

答案 1 :(得分:1)

与继承版本相比,包装集合将为您提供更好的控制,因此引入错误的机会更少。它还允许您隐藏或掩盖集合的复杂性。例如,您可以创建自己的访问者和属性。

在性能方面,你不会因为收藏而伤害自己。包装类实际上是一个非常薄的集合数据层,不应该影响性能。

相关问题