您的位置:首页 > 文旅 > 美景 > 域名优惠_凡科建站是不是免费的_被国家禁止访问的网站怎么打开_怎么优化一个网站关键词

域名优惠_凡科建站是不是免费的_被国家禁止访问的网站怎么打开_怎么优化一个网站关键词

2024/12/26 23:40:38 来源:https://blog.csdn.net/qq_3517289697/article/details/144619810  浏览:    关键词:域名优惠_凡科建站是不是免费的_被国家禁止访问的网站怎么打开_怎么优化一个网站关键词
域名优惠_凡科建站是不是免费的_被国家禁止访问的网站怎么打开_怎么优化一个网站关键词

IEnumerable接口

在C#中,IEnumerable 是一个泛型接口,它表示一个可以通过 IEnumerator 迭代器进行迭代枚举的集合。这个接口是非常基础且重要的,因为它允许开发者以一致的方式遍历任何实现了该接口的集合,无论是数组、列表、自定义集合还是LINQ查询的结果。

IEnumerable是可迭代类型,只要一个类型实现了IEnumerable接口 那么就可以对它进行遍历。

实现IEnumerable接口

yield关键字 : 迭代器(相当于实现了IEnumerator枚举器)

在遍历Student对象时通过类中GetEnumerator方法向外部返回元素。

// 实现
class Student:System.Collections.IEnumerable
{public int Id { get; set; }public IEnumerator GetEnumerator(){yield return "学生1";yield return "学生2";yield return "学生3";}
}
// 使用
public class IEnumerableShow
{public void Show(){Student student = new Student();foreach (var item in student) // 进行迭代{Console.WriteLine(item);}// 第一次打印学生1,第二次打印学生2,第三次打印学生3。}
}


IEnumerator接口

IEnumerator 是一个用于迭代集合对象(如列表和数组)的接口。它提供了用于访问对象集合的元素的方法。

IEnumerable和IEnumerator接口搭配使用:

在遍历Student对象时通过Student类中GetEnumerator方法,对StudentEnumerator类进行实例,并触发遍历。

// 第一步:实现IEnumerable接口
class Student:System.Collections.IEnumerable
{public int Id { get; set; }public IEnumerator GetEnumerator(){string[] student = { "学生1" , "学生2", "学生3"};return new StudentEnumerator(student); // 实例StudentEnumerator类,并通过构造向类中数组赋值}
}// 第二步: 实现 IEnumerator接口
internal class StudentEnumerator : IEnumerator
{private string[] _student;int _position = -1;public StudentEnumerator(string[] student){this._student = student;}public object Current // 获取集合中位于当前枚举的元素{get { if (_position == -1 ||  _position >= _student.Length){throw new InvalidOperationException();}return _student[_position];}}public bool MoveNext() // 把操作推进到下一个{if ( _position < _student.Length-1){_position++;return true;}return false;}public void Reset() // 将枚举数设为初始数据{_position = -1;}
}
// 第三步: 使用
public class IEnumerableShow
{public void Show(){int[] array = { 1, 2, 3, 4, 5, };Student student = new Student() { Id = 1 };foreach (var item in student){Console.WriteLine(item);}}
}

版权声明:

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

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