C#编程入门:枚举器与foreach循环的实现解析

需积分: 0 3 下载量 96 浏览量 更新于2024-08-02 收藏 5.69MB PDF 举报
"这篇文档是关于Visual C#开发技术的文章集合,主要涵盖了Asp.Net编程、设计和架构、设计模式以及数据库和数据访问等相关主题。文章集合旨在帮助初学者掌握C#编程,其中特别提到了枚举器(Enumerator)的概念和在C#中的应用。" 在C#编程中,枚举器(Enumerator)是一个非常重要的概念,特别是在处理集合和迭代操作时。枚举器允许开发者使用`foreach`循环遍历集合对象的元素,提供了一种简洁、高效的编程方式。在C# 2.0之前,实现枚举器需要手动实现`IEnumerable`接口并提供`GetEnumerator`方法,返回一个实现了`IEnumerator`接口的对象。而从C# 2.0开始,引入了更简洁的语法来创建枚举器,使得这个过程变得更加便捷。 以下是一个简单的示例,展示如何在C# 1.1中创建一个自定义的枚举器: ```csharp public class ListBox { private string[] strings = new string[8]; private int ctr = 0; public ListBox(params string[] initialStrings) { foreach (string s in initialStrings) { strings[ctr++] = s; } } public void Add(string theString) { strings[ctr] = theString; ctr++; } public int GetNumEntries() { return ctr; } // 实现IEnumerable接口 IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } // 返回实现IEnumerator接口的对象 public ListBoxEnumerator GetEnumerator() { return new ListBoxEnumerator(this); } } public class ListBoxEnumerator : IEnumerator { private ListBox lb; private int index = -1; public ListBoxEnumerator(ListBox listbox) { lb = listbox; } public object Current { get { return lb.strings[index]; } } public bool MoveNext() { if (index < lb.getNumEntries() - 1) { index++; return true; } else { return false; } } public void Reset() { index = -1; } } ``` 在C# 2.0及更高版本中,可以通过使用匿名方法或者`yield return`语句简化枚举器的实现,如下所示: ```csharp public class ImprovedListBox { private string[] strings = new string[8]; private int ctr = 0; public ImprovedListBox(params string[] initialStrings) { foreach (string s in initialStrings) { strings[ctr++] = s; } } public void Add(string theString) { strings[ctr] = theString; ctr++; } public int GetNumEntries() { return ctr; } // 使用yield return实现枚举器 public IEnumerator<string> GetEnumerator() { for (int i = 0; i < ctr; i++) { yield return strings[i]; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } ``` 通过这种方式,`ImprovedListBox`类无需显式地创建一个单独的枚举器类,而是直接在`GetEnumerator`方法内使用`yield return`语句返回每个元素,简化了代码结构。这使得在C# 2.0及更高版本中实现枚举器变得更加直观和高效。 枚举器在C#编程中扮演着关键角色,特别是在处理集合数据时。它们使开发者能够以流畅、可读性强的方式遍历集合,而无需关心底层的迭代细节。随着语言版本的更新,C#为创建枚举器提供了更加简洁和强大的工具,使得开发更加高效。