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的对象
标签:
c# .net core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?