小编Bru*_*sta的帖子

上课时收藏

当一个类必须具有某种对象的容器(集合)时,有几种选择,我想知道我会更喜欢哪种实现。

这里遵循我发现的选项:

public class AClass : IEnumerable<string>{
   private List<string> values = new List<string>()

   IEnumerator IEnumerable.GetEnumerator()
   {
      return GetEnumerator();
   }

   public IEnumerator<T> GetEnumerator(){
      return values.GetEnumerator();
   }
}
Run Code Online (Sandbox Code Playgroud)

优点:AClass不依赖于集合的具体实现(在这种情况下为List)。

缺点:AClass没有添加和删除元素的接口

public class AClass : ICollection<string>{
   private List<string> values = new List<string>()

   IEnumerator IEnumerable.GetEnumerator()
   {
      return GetEnumerator();
   }

   public IEnumerator<T> GetEnumerator(){
      return values.GetEnumerator();
   }

   //other ICollectionMembers
}
Run Code Online (Sandbox Code Playgroud)

优点:与IEnumerable相同,并且具有用于添加和删除元素的界面

缺点:ICollection接口定义了其他人很少使用的方法,仅出于接口的目的而实现这些方法就很无聊。IEnumerable LINQ扩展也可以解决其中一些问题。

public class AClass : List<string>{

}
Run Code Online (Sandbox Code Playgroud)

优点:无需执行任何方法。调用方可以调用List实现的任何方法

缺点:AClass依赖于集合列表,如果更改,则可能需要更改某些调用者代码。同样,AClass不能继承任何其他类。

问题是:我更愿意声明我的班级包含一个同时支持添加和删除操作的集合?或其他建议...

c# collections

7
推荐指数
1
解决办法
292
查看次数

标签 统计

c# ×1

collections ×1