编程语言
首页 > 编程语言> > c# – 自定义枚举/集合何时有用?

c# – 自定义枚举/集合何时有用?

作者:互联网

我访问了不同的网站,试图了解使用自定义枚举的实时示例,我正在放弃这一行.我有例子.但他们让我感到困惑.

拿1

class NumberArray
{
    public int[] scores;

    public NumberArray()
    {
    }

    public NumberArray(int[] scores)
    {
        this.scores = scores;
    }

    public int[] Scores
    {
        get {return scores;}
    }

}

拿2

public class Enumerator : IEnumerator
{
    int[] scores;
    int cur;
    public Enumerator(int[] scores)
    {
        this.scores = scores;
        cur = -1;
    }
    public Object Current
    {
        get {
            return scores[cur];
        }
    }

    public void Reset()
    {
        cur = -1;
    }

    public bool MoveNext()
    {
        cur++;
        if (cur < scores.Length)
            return true;
        else return false;
    }
}

public class Enumerable : IEnumerable
{
    int[] numbers;

    public void GetNumbersForEnumeration(int[] values)
    {
        numbers = values;
        for (int i = 0; i < values.Length; i++)
            numbers[i] = values[i];
    }

    public IEnumerator GetEnumerator()
    {
        return new Enumerator(numbers);
    }
}

主要

static void Main()
{
    int[] arr = new int[] { 1, 2, 3, 4, 5 };
    NumberArray num = new NumberArray(arr);
    foreach(int val in num.Scores)
    {
        Console.WriteLine(val);
    }

    Enumerable en = new Enumerable();
    en.GetNumbersForEnumeration(arr);

    foreach (int i in en)
    {
        Console.WriteLine(i);
    }
    Console.ReadKey(true);
}

在第2步中,我按照自定义迭代来迭代与我相同的整数数组
采用自定义迭代,我为什么要打败灌木来迭代一个整数?

可能我错过了实时自定义迭代需求.你能解释一下我不能用现有的迭代工具做的任务吗? (我刚完成学业,所以给我一个简单的例子,这样我就能理解它).

更新:
我从一些网站上拿了那些例子.该代码没有什么特别之处,即使不使用自定义迭代,我们也可以非常简单地实现它,我的兴趣是了解自定义迭代非常方便的真实场景.

解决方法:

当您迭代的资源没有预先加载到内存中,而是在每次迭代中根据需要获取时,自定义迭代器非常有用.例如,在LINQ to SQL中,当您执行以下操作时:

foreach(var employee in dataContext.Employees) {
    // Process employee
}

在foreach循环的每个步骤中,查询数据库中的Employees表以获取下一条记录.这样,如果您提前退出循环,则不会读取整个表,而只会读取所需的记录.

请参阅此处获取真实示例:enumerate lines on a file.此处,每次在foreach循环的迭代中都会从文件中读取每一行. (作为旁注,.NET Framework 4提供了内置的相同功能).

标签:c,enumerable,design-consideration
来源: https://codeday.me/bug/20190717/1485124.html