选择什么样的集合界面?

时间:2011-07-22 21:48:48

标签: c# .net

系统首选哪种收集界面?系统我的意思是存储库,服务等。所以我需要选择IEnumerable,ICollection,IList或者甚至可能是List。

我从理论上说,使用IEnumerable会更好。但使用起来不太方便:例如,我必须使用GetElementAt方法而不是索引器。

我目前的选择是IList,但我怀疑这个决定。

2 个答案:

答案 0 :(得分:5)

如果您想允许索引器访问,则应使用IList<T>。一般规则是使用仍然满足所有使用要求的最不具体的类型。在你的情况下,这听起来像一个列表。 (当然,IList<T>的具体程度低于List<T>

答案 1 :(得分:5)

这实际上取决于您希望为您的存储库,服务等的消费者提供哪种类型的访问。

如果您只是打算让消费者阅读该集合,请使用IEnumerable<T>(没有可用的写入方法)。

如果您希望消费者直接添加到集合中,那么ICollection<T>中的方法会为他们提供。

一般情况下,我会尝试尽可能多地将集合公开为IEnumerable<T>。当用户想要向集合添加内容时,他们必须调用单独的方法而不是直接写入集合本身。它使您有机会验证输入,执行其他检查等。