应该返回什么ReadOnlyCollection类型的方法?

时间:2013-08-10 01:03:23

标签: c# .net generics collections

我已经看过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

2 个答案:

答案 0 :(得分:1)

如果您返回尽可能通用的类型,则可以灵活地稍后更改实现。但是当然你必须返回一个对消费者有用的类型。因此,通常返回接口类型更好,也更通用类型,只要这不会导致消费者方面的使用问题。

答案 1 :(得分:0)

我最初的问题不是非常明确;有许多注意事项应予以考虑:

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

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