0

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

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

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

要遵循CA1002 ,如果我希望具体返回 a ,我的方法应该返回实际的集合类ReadOnlyCollectionCollection等)还是它们的接口IList、等) ?ICollectionReadOnlyCollection

4

2 回答 2

1

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

于 2013-08-10T01:07:19.593 回答
0

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

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

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

于 2018-10-14T18:54:24.440 回答