📅  最后修改于: 2023-12-03 14:42:03.197000             🧑  作者: Mango
IEnumerable
和 foreach
- C#在C#中,IEnumerable
接口和 foreach
循环结合在一起被广泛用于遍历集合和序列。IEnumerable
接口提供一种通用的方式来表示通过迭代器访问集合的枚举功能。foreach
循环则是一个用于简化遍历 IEnumerable
对象的语法糖。
在本文中,我们将深入了解 IEnumerable
接口和 foreach
循环的作用、用法和相关注意事项。
IEnumerable
接口IEnumerable
接口定义了一个方法 GetEnumerator()
,该方法返回一个实现了 IEnumerator
接口的对象。通过该对象,我们可以逐个访问集合中的元素。
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
IEnumerator
接口IEnumerator
接口定义了用于在集合上进行迭代的方法和属性。它包含三个主要的成员:
MoveNext()
:将迭代器移动到集合的下一个元素。如果成功移动到下一个元素,则返回 true
,否则返回 false
。Reset()
:将迭代器重置为集合的起始位置。Current
:获取迭代器当前位置的元素。public interface IEnumerator
{
bool MoveNext();
void Reset();
object Current { get; }
}
foreach
循环foreach
循环提供了一种便捷的语法用于遍历实现了 IEnumerable
接口的对象。在每次迭代中,foreach
循环都会调用 GetEnumerator()
方法获取一个 IEnumerator
对象,并在循环内部使用它来访问集合中的元素。
下面是一个使用 foreach
循环遍历集合的示例:
foreach (var item in collection)
{
// 对每个元素执行操作
}
接下来,我们将通过一个示例来演示如何使用 IEnumerable
接口和 foreach
循环。
using System;
using System.Collections;
class Program
{
static void Main()
{
// 创建一个字符串集合
StringCollection collection = new StringCollection();
collection.Add("Apple");
collection.Add("Banana");
collection.Add("Cherry");
// 使用 foreach 循环遍历集合
foreach (var item in collection)
{
Console.WriteLine(item);
}
}
}
// StringCollection 类实现了 IEnumerable 接口
class StringCollection : IEnumerable
{
private readonly string[] items = new string[3];
public void Add(string item)
{
for (int i = 0; i < items.Length; i++)
{
if (items[i] == null)
{
items[i] = item;
break;
}
}
}
public IEnumerator GetEnumerator()
{
return new StringEnumerator(items);
}
}
class StringEnumerator : IEnumerator
{
private readonly string[] items;
private int position = -1;
public StringEnumerator(string[] items)
{
this.items = items;
}
public object Current => items[position];
public bool MoveNext()
{
position++;
return position < items.Length;
}
public void Reset()
{
position = -1;
}
}
上述示例中,我们创建了一个 StringCollection
类实现了 IEnumerable
接口,并在其中使用数组来存储字符串集合。然后,我们使用 foreach
循环遍历该集合,并打印出每个元素的值。
请注意,在实现 IEnumerable
接口时,我们必须提供一个类似 GetEnumerator()
的方法来返回一个实现了 IEnumerator
接口的对象,该对象负责迭代集合中的元素。
在C#中,IEnumerable
接口和 foreach
循环为程序员提供了一种方便的方式来遍历集合和序列。通过实现 IEnumerable
接口和 IEnumerator
接口,我们可以自定义集合类并使用 foreach
循环遍历其中的元素。
这种方法在处理集合和序列时非常常见,因此对于每个C#开发人员来说,掌握 IEnumerable
和 foreach
是至关重要的。
代码片段的 markdown 标记如下:
```csharp
// 你的代码