如果我有一个 List<T>,在遍历列表时使用 IEnumerable<T> 有什么好处吗?

If I have a List<T>, is there any advantage of using an IEnumerable<T> when looping through the list?

在 C# 中,如果我有一个存储在对象中的 List<T>,并且我想检查列表中是否存在某个值,调用 [=19] 的函数是否有任何优势=] 一个 IEnumerable<T> 而不是循环遍历我已经拥有的 List<T>

谢谢。

当您 return 将 属性 作为 IEnumerable<T> 时,这会告诉调用者您不能改变它的值,您可以迭代它,这可以帮助您获得摆脱了很多意想不到的错误。

如果你将 属性 公开为 List<T>,它很容易被 "others" 变异,这会导致大型系统混乱,所以保持你的数据不可变可能。

图像你正在跟踪一个错误,因为列表中的项目不是当前的,如果 属性 作为列表公开,你必须查看 属性 的所有用法才能看到谁改变了它,但是如果你将它公开为 Iemumerable,你可以确定唯一改变它的地方是它自己的对象,这将为你节省大量时间来跟踪错误。

List 是一个可变集合 - 您可以添加、删除和排序等。它很灵活,但 IEnumerable 允许您使用相同的代码来处理数组、链表、列表、返回的迭代器的任何实现来自使用 yield 语句的方法。

您有一个正在描述的读取操作。 Return 你的 IList<T> 作为 IEnumerable<T>

然后,使用 linq 的 Contains() - 它在内部检查 ICollection 的实现并优化使用可用的实现,尽管它接受 IEnumerable<T>。换句话说,返回 IEnumerable<T> 不会有任何损失。