概述
要使用foreach的类需要实现方法:IEnumerator<T泛型> GetEnumerator()
以下使用“T泛型=int”类型来实现一个迭代,也可以改成泛型的迭代器。
效果如下图:
代码如下:
public class Demo
{
public int[] _data = new int[]{1,2,3}; //需要foreach迭代的数据
public IEnumerator<int> GetEnumerator()//返回迭代器
{
return new Enumerator(_data);
}
}
//迭代器
public class Enumerator : IEnumerator<int>
{
int IEnumerator<int>.Current { get { return _current; } }
object IEnumerator.Current { get { return _current; } }
private int _current = default!; //存储当前的值
private int _index; //索引位置
public int[] _data; //需要遍历的数据
public Enumerator(int[] data)
{
this._data = data;
}
void IDisposable.Dispose()
{
}
bool IEnumerator.MoveNext()
{
if (_data == null || _data.Length < 1)
{
return false;
}
if (_index < _data.Length)
{
_current = _data[_index];
_index++;
return true;
}
else
{
return false;
}
}
void IEnumerator.Reset()
{
_index = 0;
_current = default!;
}
}
泛型版本的代码如下:
public class DataModel
{
public string Name { get; set; }
}
public class Demo
{
public DataModel[] _data = new DataModel[] { new DataModel(){Name = "1"}, new DataModel(){Name = "2"}, new DataModel(){Name = "3"} }; //需要foreach迭代的数据
public IEnumerator<DataModel> GetEnumerator()//返回迭代器
{
return new Enumerator<DataModel>(_data);
}
}
public class Enumerator<T> : IEnumerator<T>
{
T IEnumerator<T>.Current { get { return _current; } }
object IEnumerator.Current { get { return _current; } }
private T _current = default!; //存储当前的值
private int _index; //索引位置
public T[] _data; //需要遍历的数据
public Enumerator(T[] data)
{
this._data = data;
}
void IDisposable.Dispose()
{
}
bool IEnumerator.MoveNext()
{
if (_data == null || _data.Length < 1)
{
return false;
}
if (_index < _data.Length)
{
_current = _data[_index];
_index++;
return true;
}
else
{
return false;
}
}
void IEnumerator.Reset()
{
_index = 0;
_current = default!;
}
}
最后
以上就是微笑纸鹤为你收集整理的C# 使用foreach遍历自己的实现类(迭代器)的全部内容,希望文章能够帮你解决C# 使用foreach遍历自己的实现类(迭代器)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复