C#集合类 - 是或否

Stu*_*143 11 c# collections class

我是C#的相对新手,虽然我是一名称职的程序员,但我承认我对编写自定义集合类是否是一个好主意感到困惑.很多人似乎都说"不要",但在C#中有一整套基类.

这是我的具体案例.我有一个时间表申请.作为其中的一部分,我有一个服务类,服务类包含服务y的集合,例如路由链接.路由链接本身就是一个自定义类:

public class Service
{
  public RouteLinks RL;    // A collection of RouteLink types
  ...
}

public class RouteLink
{
    public string FirstStopRef;
    public string LastStopRef;
    public Tracks RouteTrack;    // Another collection, this time of Track types
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经看过使用Dictionary作为RouteLinks的类型,因为我需要能够引用它们.原则上这很好.但是,将RouteLink添加到RouteLinks集合的过程包括检查它是否已经存在,或者它是否已扩展和现有的路由链接,或者......为此,我需要一个自定义的添加功能.

那么为什么创建自定义集合类会有这么糟糕的做法呢?为什么我不应该继承CollectionBase或DictionaryBase?

我或许应该补充一点,我从VBA传输此代码[请不要拍我:)]我必须实现自定义集合.

Dan*_*ins 1

一个简单的解决方案是定义另一个类,而不是RouteLinks集合类型,比方说RouteLinksRepository。此类将包含用于List<RouteLink>AddRoute(RouteLink)此对象集合交互的功能以及任何其他自定义逻辑RouteLink。然后,您的服务类将仅包含此存储库类的一个实例。

public class Service
{
  public RouteLinksRepository RL;    // A collection of RouteLink types
  // ...
}

public class RouteLinksRepository
{
    public List<RouteLink> RouteLinks;
    public bool AddRoute(RouteLink linkToAdd)
    {
        //Custom logic on whether or not to add link
    }
    //Your other logic for the class

}

public class RouteLink
{
    public string FirstStopRef;
    public string LastStopRef;
    public Tracks RouteTrack;    // Another collection, this time of Track types
}
Run Code Online (Sandbox Code Playgroud)