系统首选哪种收集界面?系统我的意思是存储库,服务等。所以我需要选择IEnumerable,ICollection,IList或者甚至可能是List。
我从理论上说,使用IEnumerable会更好。但使用起来不太方便:例如,我必须使用GetElementAt方法而不是索引器。
我目前的选择是IList,但我怀疑这个决定。
答案 0 :(得分:5)
如果您想允许索引器访问,则应使用IList<T>
。一般规则是使用仍然满足所有使用要求的最不具体的类型。在你的情况下,这听起来像一个列表。 (当然,IList<T>
的具体程度低于List<T>
)
答案 1 :(得分:5)
这实际上取决于您希望为您的存储库,服务等的消费者提供哪种类型的访问。
如果您只是打算让消费者阅读该集合,请使用IEnumerable<T>
(没有可用的写入方法)。
如果您希望消费者直接添加到集合中,那么ICollection<T>
中的方法会为他们提供。
一般情况下,我会尝试尽可能多地将集合公开为IEnumerable<T>
。当用户想要向集合添加内容时,他们必须调用单独的方法而不是直接写入集合本身。它使您有机会验证输入,执行其他检查等。