我已经看过Returning 'IList' vs 'ICollection' vs 'Collection'以及它链接的其他问题,但我仍然对这个问题感到困惑。
为了演示的目的,我们假设我有一个类,我公开了一个公共方法,如下所示:
public ReadOnlyCollection<Type> GetReadOnlyCollection(IEnumerable<Type> enumerable)
{
List<Type> list = enumerable.ToList();
return new ReadOnlyCollection<Type>(list);
}
要关注CA1002,我的方法是否应该返回实际收集类(ReadOnlyCollection
,Collection
等)或其接口(IList
,ICollection
等),如果我希望专门返回ReadOnlyCollection
?
答案 0 :(得分:1)
如果您返回尽可能通用的类型,则可以灵活地稍后更改实现。但是当然你必须返回一个对消费者有用的类型。因此,通常返回接口类型更好,也更通用类型,只要这不会导致消费者方面的使用问题。
答案 1 :(得分:0)
我最初的问题不是非常明确;有许多注意事项应予以考虑:
IEnumerable
可能就足够了。IReadOnlyCollection
可能没问题。System.Collections.Immutable
中的不可变集合。这些问题中有一些有用的答案: