c# - 哪种 IEnumerable To a List 方式更好?

标签 c# .net linq collections ienumerable

我想知道以下事实。我有一个数据存储库,它返回我的所有数据 IEnumerable<Customer> .

在我的业务逻辑中,有时我需要列表,以便我可以添加内容,例如。

当我检索 IEnumerable<Customer> 时我有 2 个选项可以从中获取列表。

要么使用Linq扩展方法.ToList()或像这样转换它(我认为它不是转换)(List<Customer>)IEnumerable<Customer> .

必须提及的是,我不使用列表进行迭代,因此我不需要每次枚举的新副本。在这种情况下,在我的简单情况下,我必须使用 cast 方法而不是 .ToList 是真的吗? (创建一个新副本)?

// use simple cast?
List<Customer> customers = (List<Customers>)DataSource.GetCustomers(); 

// or if i use this i get a bit of performance loss?
List<Customer> customers = DataSource.GetCustomers().ToList(); 

最佳答案

我会选择 ToList() ,因为该方法返回一个 IEnumerable<Customer>并且您无法确定内部实现。

也许现在 GetCustomers()返回 List<>IEnumerable<> 掩盖,但是如果将来内部实现发生变化怎么办?

编辑:

List<Customer>实现接口(interface) IEnumerable<Customer> ,以及类似 Customer[] 的数组或 LinkedList<Customer> .因此,当您收到类型为 IEnumerable<WhateverClass> 的对象时你不能确定它是 List<Customer>当然,只有当您要转换为的类型与接口(interface)后面的类型相同时,转换才会起作用,否则您将收到异常。

使用 ToList() ,正如您所说的那样,您创建了一个包含 IEnumerable<> 元素的新对象,但至少您可以毫无异常(exception)地安全地迭代/修改该对象。

方法返回 IEnumerable<T>因为这样它就不会绑定(bind)到任何特定的集合实现,并且在未来它可以在不改变方法签名的情况下从列表切换到数组或其他任何东西......

关于c# - 哪种 IEnumerable To a List 方式更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11700935/

相关文章:

.net - 使用 KeyValuePair<K, V> 的 AutoMapper 没有映射

c# - 使用我的 C# 应用程序从谷歌浏览器中获取文本

c# - 如何在.net中同时处理目录中的文件

c# - 内存表情的最快方法

c# - 分页如何在 C# Facebook sdk 上工作

c# - 在 LINQ 查询期间提供用户反馈

c# - Linq:从字典中选择 KeyValuePair,其中值是对象列表

c# - listview添加新的item控件

c# - "Bad IL Range"异常是什么意思?

c# - 查找拆分字符串中的所有组