What ReadOnlyCollection type should methods return?
我看到过返回"ilist"和"icolection"和"collection"以及它链接到的其他问题,但我仍然对这个问题感到困惑。
为了演示的目的,让我们假设我有一个类,其中公开了一个公共方法,如下所示:
1 2 3 4 5 | public ReadOnlyCollection<Type> GetReadOnlyCollection(IEnumerable<Type> enumerable) { List<Type> list = enumerable.ToList(); return new ReadOnlyCollection<Type>(list); } |
为了遵循CA1002,如果我特别想返回一个
如果返回尽可能通用的类型,则可以获得稍后更改实现的灵活性。当然,您必须返回一个对消费者有用的类型。因此,一般来说,返回接口类型更好,更一般的类型也更好,只要这不会在使用者端造成任何使用问题。
我最初的问题没有很好的定义;应该考虑以下几个因素:
- 用户只需要通过代码枚举吗?如果是这样,
IEnumerable 可能就足够了。 - 用户是否应该知道集合是只读的?如果是这样的话,
IReadOnlyCollection 可能是好的。 - 是否要阻止用户将只读集合强制转换为可变类型?如果是,请使用来自
System.Collections.Immutable 的不可变集合。
这些问题中有一些有用的答案:
- 用于公开成员集合的ReadOnlyCollection或IEnumerable?
- 用于公开列表成员的IEnumerable与IReadonlyCollection与ReadOnlyCollection