c# foreach学习
c#的foreach需要类去实现 IEnumerable接口 还有个泛型的IEnumerable<T> 接口


我们从List的源码里可以看到

就是转了一层 所以我们直接从原始的IEnumerable接口实现就好
public class ATest : IEnumerable { public int Num { get; set; } private ATest[] per; public ATest(int num) { Num = num; } public ATest(ATest[] arr) { per= arr; } public IEnumerator GetEnumerator() { Console.WriteLine("new ATestEnumerator"); return new ATestEnumerator(per); } }
代码如上面所示,最主要的是这个GetEnumerator()方法,我们可以看到它需要我们返回IEnumerator类型的类

注意2个接口的名称不要搞混了
public class ATestEnumerator : IEnumerator { public object Current { get { return _ATests[postition]; } } int postition = -1; public ATest[] _ATests; public ATestEnumerator(ATest[] aTests) { _ATests = aTests; } public bool MoveNext() { return ++postition < _ATests.Length; } public void Reset() { postition = -1; } }
代码如上面所示
foreach的执行逻辑是:
- 先执行GetEnumerator()获取IEnumerator
- 然后执行MoveNext()判断是否还有下一个数据
- 最后拿到Current的对象
浙公网安备 33010602011771号