C#中IEumerable的简单了解
2021/8/7 20:06:22
本文主要是介绍C#中IEumerable的简单了解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考网址:https://blog.csdn.net/qq_39806817/article/details/115024666
一、IEnumerable简单介绍
IEnumerable是可枚举类型,一般在迭代时应用广泛,如foreach中要循环访问的集合或数组都实现了IEnumerable接口。只要能够遍历,都直接或间接实现了IEnumerable接口。如:String类型的对象,可遍历,输出时以字符输出,间接实现了IEnumerable接口,"OOP"遍历打印就是'O','O','P';又如int类型没有实现IEnumerable接口,就无法依赖foreach遍历。
二、实现IEnumerable接口
现以一个实例遍历数组:
IEnumerableTest enumerableTest = new IEnumerableTest();
enumerableTest.Show();
-------------------------------------------------------
public class IEnumerableTest
{
DemoIEnumerable demoIEnumerable = new DemoIEnumerable();
public void Show()
{
foreach (var item in demoIEnumerable)
{
Console.WriteLine(item);
}
}
}
public class DemoIEnumerable : IEnumerable
{
public IEnumerator GetEnumerator()
{
string[] students = new[] { "瑶瑶1", "瑶瑶2", "瑶瑶3" };
return new TestEnumerator(students);
}
}
public class TestEnumerator : IEnumerator
{
private string[] _students;
//元素下标
private int _position = -1;
public TestEnumerator(string[] students)
{
this._students = students;
}
//public object Current => throw new NotImplementedException();
public object Current
{
get
{
if (_position == -1 || _position >= _students.Length)
{
throw new InvalidOperationException();
}
return _students[_position];
}
}
public bool MoveNext()
{
if (_position < _students.Length - 1)
{
_position++;
return true;
}
return false;
}
public void Reset()
{
_position = -1;
}
}
上面的实例执行foreach步骤:首先进入DemoIEnumerable类执行GetEnumerator()方法,然后初始化_position=-1,接着执行TestEnumerator类的构造函数,然后返回进入in,执行TestEnumerator类的MoveNext()方法,判断下标(_position)是否越界,如没有越界,下标自动加1,并返回true,然后获取TestEnumerator类的Current属性,返回对应下标的值,依次迭代,获取数组的值,直至结束。
这篇关于C#中IEumerable的简单了解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#