【问题标题】:What ReadOnlyCollection type should methods return?方法应该返回什么 ReadOnlyCollection 类型?
【发布时间】:2013-08-12 00:48:19
【问题描述】:

我已经看到Returning 'IList' vs 'ICollection' vs 'Collection' 和它链接的其他问题,但我仍然对这个问题感到困惑。

为了演示的目的,假设我有一个类,我在其中公开了一个公共方法,如下所示:

public ReadOnlyCollection<Type> GetReadOnlyCollection(IEnumerable<Type> enumerable)
{
    List<Type> list = enumerable.ToList();
    return new ReadOnlyCollection<Type>(list);
}

要关注CA1002,我的方法应该返回实际的集合类ReadOnlyCollectionCollection 等)还是它们的接口IListICollection 等)如果我想专门返回一个ReadOnlyCollection

【问题讨论】:

  • 没有“一个答案”。但是,一般来说,您应该针对接口而不是特定类进行编程。恕我直言...
  • 这取决于我猜,如果您打算重用/派生类,那么接口是肯定的,否则主要关注的是性能。海事组织

标签: c# .net generics collections


【解决方案1】:

我最初的问题不是很明确;有许多需要考虑的因素:

  • 用户是否只需要通过代码枚举?如果是这样,IEnumerable 可能就足够了。
  • 用户是否应该知道该集合是只读的?如果是这样,IReadOnlyCollection 可能没问题。
  • 您想阻止用户将您的只读集合转换为可变类型吗?如果是这样,请使用来自System.Collections.Immutable 的不可变集合。

这些问题中有一些有用的答案:

【讨论】:

    【解决方案2】:

    如果您返回一个尽可能通用的类型,您将获得稍后更改实现的灵活性。但是当然你必须返回一个对消费者有用的类型。因此,一般返回接口类型比较好,一般类型也好,只要不给消费者端的使用带来任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 2021-11-19
      • 1970-01-01
      • 2016-11-20
      • 2016-06-27
      • 1970-01-01
      • 2013-09-16
      相关资源
      最近更新 更多