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