ExtensionGetEnumerator支持foreach循环
在 C# 9.0 中,对于枚举器类型,我们可以使用扩展方法来实现 GetEnumerator() 方法。这使得我们可以在自己的类中支持 foreach 循环。
# 为什么要使用扩展方法实现 GetEnumerator()?
在 C# 8.0 及之前的版本中,我们需要在自己的类中显式实现 IEnumerator 和 IEnumerable 接口,以支持 foreach 循环。这使得代码比较冗长。而在 C# 9.0 中,我们可以使用扩展方法来实现 GetEnumerator() 方法,从而使得代码更加简洁。
# 扩展方法实现 GetEnumerator() 的语法
我们可以使用以下语法在扩展方法中实现 GetEnumerator() 方法:
namespace System.Collections.Generic
{
public static class MyExtensions
{
public static Enumerator<T> GetEnumerator<T>(this MyCollection<T> collection)
{
// 实现 GetEnumerator() 方法的代码
}
}
}
其中:
MyCollection<T>
表示我们自己定义的类。Enumerator<T>
表示我们自己定义的枚举器类型。
下面是一个例子:
using System.Collections.Generic;
public class MyCollection<T>
{
private readonly List<T> _list = new List<T>();
public void Add(T item)
{
_list.Add(item);
}
}
public static class MyExtensions
{
public static Enumerator<T> GetEnumerator<T>(this MyCollection<T> collection)
{
return new Enumerator<T>(collection);
}
}
public class Enumerator<T>
{
private readonly MyCollection<T> _collection;
private int _currentIndex = -1;
public Enumerator(MyCollection<T> collection)
{
_collection = collection;
}
public T Current
{
get
{
return _collection[_currentIndex];
}
}
public bool MoveNext()
{
_currentIndex++;
return _currentIndex < _collection.Count;
}
}
这里,我们自己定义了一个 MyCollection 类,并实现了 Add 方法。然后,我们使用扩展方法来实现 GetEnumerator() 方法,返回我们自己定义的 Enumerator 类型。
# 如何使用 Extension GetEnumerator 支持 foreach 循环
我们可以使用以下代码来支持 foreach 循环:
var collection = new MyCollection<int>();
collection.Add(1);
collection.Add(2);
collection.Add(3);
foreach (var item in collection)
{
Console.WriteLine(item);
}
这里,我们实例化了 MyCollection 类,并添加了一些元素。然后,我们可以直接在 foreach 循环中使用该对象,因为我们已经实现了 GetEnumerator() 方法。
# 总结
C# 9.0 中,我们可以使用扩展方法来实现 GetEnumerator() 方法,从而支持 foreach 循环。这使得我们的代码更加简洁。
上次更新: 2023/04/26, 22:10:06