欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > C#中迭代器和IEnumerator 接口和IEnumerable 接口的区别和作用

C#中迭代器和IEnumerator 接口和IEnumerable 接口的区别和作用

2025/3/26 1:52:04 来源:https://blog.csdn.net/m0_46385244/article/details/146414365  浏览:    关键词:C#中迭代器和IEnumerator 接口和IEnumerable 接口的区别和作用

在C#里,迭代器、IEnumerator 接口以及 IEnumerable 接口都和集合遍历相关,不过它们的作用和使用场景存在差异。下面为你详细介绍:

1. IEnumerable 接口

  • 作用IEnumerable 接口用于表明一个类或结构可以被迭代。实现了 IEnumerable 接口的类型意味着它包含一系列元素,并且能够逐个访问这些元素。该接口只定义了一个方法 GetEnumerator(),此方法会返回一个实现了 IEnumerator 接口的对象。
  • 示例代码
using System;
using System.Collections;// 自定义集合类,实现 IEnumerable 接口
class MyCollection : IEnumerable
{private int[] items = { 1, 2, 3, 4, 5 };public IEnumerator GetEnumerator(){return new MyEnumerator(items);}
}

2. IEnumerator 接口

  • 作用IEnumerator 接口用于实际执行迭代操作。它定义了迭代器的基本行为,包含 Current 属性(用于获取当前元素)、MoveNext() 方法(用于移动到下一个元素)以及 Reset() 方法(用于将迭代器重置到初始位置)。
  • 示例代码
// 自定义枚举器类,实现 IEnumerator 接口
class MyEnumerator : IEnumerator
{private int[] items;private int position = -1;public MyEnumerator(int[] items){this.items = items;}public object Current{get{if (position < 0 || position >= items.Length){throw new InvalidOperationException();}return items[position];}}public bool MoveNext(){position++;return position < items.Length;}public void Reset(){position = -1;}
}

3. 迭代器

  • 作用:迭代器是一种更为便捷的实现迭代的方式。借助 yield return 语句,你能够更简洁地实现 IEnumerableIEnumerator 接口。迭代器会自动处理状态管理和元素的返回,使代码更易读写。
  • 示例代码
using System;
using System.Collections;// 使用迭代器实现 IEnumerable 接口
class MyCollectionWithIterator : IEnumerable
{private int[] items = { 1, 2, 3, 4, 5 };public IEnumerator GetEnumerator(){for (int i = 0; i < items.Length; i++){yield return items[i];}}
}

区别总结

  • IEnumerable 接口:主要用于表明一个类型可以被迭代,它仅定义了获取迭代器的方法。
  • IEnumerator 接口:用于实际执行迭代操作,定义了迭代器的基本行为。
  • 迭代器:是一种更简便的实现迭代的方式,借助 yield return 语句自动处理状态管理和元素的返回。

使用示例

class Program
{static void Main(){// 使用自定义集合类MyCollection collection = new MyCollection();foreach (int item in collection){Console.WriteLine(item);}// 使用带有迭代器的自定义集合类MyCollectionWithIterator collectionWithIterator = new MyCollectionWithIterator();foreach (int item in collectionWithIterator){Console.WriteLine(item);}}
}

在上述示例中,MyCollection 类实现了 IEnumerable 接口并手动创建了一个 IEnumerator 实现类 MyEnumerator。而 MyCollectionWithIterator 类则使用迭代器更简洁地实现了相同的功能。在 Main 方法里,我们对这两个集合进行了遍历。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词