我是靠谱客的博主 微笑纸鹤,最近开发中收集的这篇文章主要介绍C# 使用foreach遍历自己的实现类(迭代器),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        要使用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遍历自己的实现类(迭代器)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部