。net中的IEnumerable

问题描述 投票:67回答:5

。net中的IEnumerable是什么?

.net ienumerable
5个回答
67
投票

这是...可以循环播放的东西。那可能是一个列表或一个数组,或者(几乎)任何其他支持foreach循环的东西。它用于需要使用foreach循环的对象,但又不知道要处理的类型是数组,列表还是自定义类型的对象。

所以这是第一个优点:如果您的方法接受IEnumerable而不是数组或列表,则它们将变得更强大,因为您可以将更多不同类型的对象传递给它们。

现在使IEnumerable真正脱颖而出的是迭代器块(C#中的yield关键字)。迭代器块像列表或数组一样实现IEnumerable接口,但是它们非常特殊,因为与列表或数组不同,它们通常一次只保存单个项目的状态。因此,例如,如果您想在一个非常大的文件中循环浏览,可以编写一个迭代器块来处理文件输入。这样一来,您一次存储的文件就永远不会超过一行,而且如果您更早地完成了循环(也许是一次搜索并且找到了所需的内容),则可能不需要读取整个文件。或者,如果您正在从大型SQL查询中读取结果,则可以将内存使用限制为一条记录。

[另一个功能是此评估为lazy”,因此,如果您正在做复杂的工作来评估您从中读取的可枚举对象,那么直到被要求时该工作才会发生。这是额外的好处,因为您经常会发现(例如再次搜索)您根本不需要做这项工作。

您可以将IEnumerable视为即时列表。


34
投票

这是由.NET中提供Iterator pattern的Collection类型实现的接口。还有通用版本是IEnumerable<T>

在实现IEnumerable的集合中移动的语法(您很少看到,因为有更漂亮的方法可以这样做):>

IEnumerator enumerator = collection.GetEnumerator();

while(enumerator.MoveNext())
{
    object obj = enumerator.Current;
    // work with the object
}

在功能上等同于:

foreach(object obj in collection)
{
    // work with the object
}

如果集合支持索引器,您也可以使用经典的for循环方法对其进行迭代,但是Iterator模式提供了一些不错的功能,例如可以为线程添加同步。


12
投票

首先是一个接口。根据MSDN的定义是


7
投票

简短的答案是,您可以在foreach上使用它。


0
投票
  • 这是一个基本接口,使我们可以循环或遍历Collection。

© www.soinside.com 2019 - 2024. All rights reserved.