gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:34:56 24 4
gpt4 key购买 nike

在访问了不同的网站以尝试理解使用自定义枚举的实时示例后,我放弃了这一行。我有例子。但它们让我感到困惑。

示例

拍摄 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);
}

在 take 2 中,我按照自定义迭代来迭代相同的整数数组,就像我在以 1. 为什么我应该拐弯抹角地使用自定义迭代来迭代整数

可能我错过了实时自定义迭代的需求。你能解释一下我无法使用现有迭代工具完成的任务吗? (我刚毕业,举个简单的例子,让我能正确理解)。

更新:我从某个站点获取了这些示例。该代码没有什么特别之处,即使不使用自定义迭代我们也可以非常简单地实现它,我的兴趣是了解自定义迭代非常方便的真实场景。

最佳答案

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

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

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

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

关于c# - 自定义可枚举/集合何时有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1600099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com