C# 列出 IList 或 IEnumerable 作为参数

Posted

技术标签:

【中文标题】C# 列出 IList 或 IEnumerable 作为参数【英文标题】:C# List IList or IEnumerable as argument 【发布时间】:2018-04-01 18:44:47 【问题描述】:

如果我想将 List 作为方法的参数,Resharper 会提示使用 IList 接口可能是一个更好的主意。如果我用 IList 替换 List,Resharper 建议使用 IEnumerable。在 Java 中,我也会将 List 接口而不是 ArrayList 作为参数。但是使用 iEnumerable 作为参数真的很好看吗?如果不需要 IList 或 List 的功能,这是使用 IEnumerable 的好习惯吗?

【问题讨论】:

“如果不需要 IList 或 List 的功能,这是使用 IEnumerable 的好习惯吗?” -- 是的。 是的,因为它打开了您可以传递的内容,例如数组或延迟加载的 Linq 查询。 提供可重用的方法总是好的。如果您要求所有泛型集合的基本接口,您可以将此方法用于多种类型,而不仅仅是列表。 IList<T> 涵盖列表和数组,但如果您不需要 IList<T> 的方法,您可以使用 IEnumerable<T> 如果您的问题得到了回答,请将其标记为这样。感谢您的支持。 【参考方案1】:

这是the article,它让我改变了主意,让我开始遵循

的原则

取最通用的类​​型,返回最具体的类型

所以回答你的问题

如果不需要 IList 或 List 的功能,这是使用 IEnumerable 的好习惯吗?

是的,是的

注意:不要过度!我见过接受IEnumerable 的代码,如果参数不是List,则抛出异常。这是愚蠢的。我上面引用的那句话的意思是“不要要求比你需要的更具体”

【讨论】:

以上是关于C# 列出 IList 或 IEnumerable 作为参数的主要内容,如果未能解决你的问题,请参考以下文章

IEnumerable 与 IQueryable 用于业务逻辑或 DAL 返回类型

C#:你会给一个 IEnumerable 类起啥名字?

C# List<T;用法

C#中ICollection介绍

IEnumerable,ICollection,IList接口问题

C#中List(Of T)类