C#中传递参数应该使用List、IList还是IEnumerable?

8

如果我想将List作为方法的参数,Resharper会提示使用IList接口可能是一个更好的选择。如果我用IList替换List,Resharper会建议使用IEnumerable。在Java中,我也会将List接口而不是ArrayList作为参数。但是,如果不需要IList或List的任何功能,使用IEnumerable作为参数真的是好看的代码吗?这是否是使用IEnumerable的良好实践?


1
是的,如果不需要 IList 或 List 的功能,使用 IEnumerable 是一个好的做法吗? -- 是的。 - 15ee8f99-57ff-4f92-890c-b56153
是的,因为它可以打开你可以传递的内容,比如数组或延迟加载的Linq查询。 - juharr
提供可重用的方法总是很好的做法。如果您请求所有通用集合的基本界面,则可以将此方法与许多类型一起使用,而不仅仅是列表。IList<T> 包括列表和数组,但如果您不需要 IList<T> 的方法,则可以使用 IEnumerable<T>。 - Tim Schmelter
如果您的问题得到了解答,请将其标记为已解决。感谢您的点赞。 - Mathieu VIALES
1个回答

13

以下是让我改变想法并开始遵循“取最通用类型,返回最特定类型”原则的文章

取最通用类型,返回最特定类型

所以回答你的问题:

如果不需要 IList 或 List 的任何功能,使用 IEnumerable 是否好?

是的,没问题

注意:不要过度使用!我曾经看到有些代码接受了一个 IEnumerable,然后如果参数不是 List 就抛出异常,这很愚蠢。上面引用的那句话的意思是“不要比你需要的更具体”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接