相关疑难解决方法(0)

任何人都可以向我解释IEnumerable和IEnumerator吗?

任何人都可以向我解释IEnumerable和IEnumerator吗?

例如,什么时候在foreach上使用它?IEnumerable和IEnumerator之间有什么区别?为什么我们需要使用它?

c# ienumerable ienumerator

256
推荐指数
11
解决办法
19万
查看次数

当有IEnumerator <T>时,为什么IEnumerable <T>是必要的?

免责声明:我明白之间的差别IEnumerable<T>,并 IEnumerator<T>和如何使用这两种.这与不重复.

这更像是一个设计问题 - 因为IEnumerator<T>已经封装了可以枚举的所有必要信息(.Current,.MoveNext()),那么引入一个type(IEnumerable<T>)的目的是什么呢?它的唯一目的是返回前者的实例?

再具体一点:

  1. 为什么不能foreach设计为直接迭代IEnumerator<T>,如下所示:

    // foreach (var e in anEnumerator) { //... }
    while (anEnumerator.MoveNext())
    {
        doSomething(anEnumerator.Current);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为什么不能直接建立Linq IEnumerator<T>

.net c# oop

20
推荐指数
1
解决办法
1318
查看次数

实现IEnumerable和IEnumerator的原因是什么

我正在准备我的C#EXAM.我对这个问题的答案感到困惑:

程序可以使用IEnumerableIEnumerator接口来执行以下哪项操作?

一个.使用MoveNext和Reset来移动对象列表.
湾 使用foreach移动对象列表.
C.按索引移动对象列表.
d.使用yield return语句创建迭代对象列表.

我的回答是b).但是这本书:MCSD认证工具包说它是a).

有人可以告诉我为什么吗?我意识到你可以获得Enumerator使用GetEnumerator()然后调用MoveNextReset方法来遍历列表(并用于Current访问迭代器引用的当前元素).但是没有实现IEnumerableIEnumeratorforeach循环中使用对象的原因?

c#

13
推荐指数
1
解决办法
1568
查看次数

为什么我们需要两个接口来枚举集合?

这是相当长一段时间,我一直在试图了解背后的想法IEnumerableIEnumerator.我阅读了网上可以找到的所有问题和答案,特别是StackOverflow,但我并不满意.我明白我应该如何使用这些接口,但不是为什么这样使用它们.

我认为我误解的本质是我们需要两个接口进行一次操作.我意识到,如果两者都需要,可能还不够.所以我采用了"硬编码"等价物foreach(正如我在这里找到的):

while (enumerator.MoveNext())
{
    object item = enumerator.Current;

    // logic
}
Run Code Online (Sandbox Code Playgroud)

并试图让它与一个界面一起工作,认为某些事情会出错,这将使我理解为什么需要另一个界面.

所以我创建了一个集合类,并实现了IForeachable:

class Collection : IForeachable
{
    private int[] array = { 1, 2, 3, 4, 5 };
    private int index = -1;

    public int Current => array[index];

    public bool MoveNext()
    {
        if (index < array.Length - 1)
        {
            index++;
            return true;
        }

        index = -1;
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用foreach …

c# ienumerable ienumerator foreach

7
推荐指数
1
解决办法
417
查看次数

标签 统计

c# ×4

ienumerable ×2

ienumerator ×2

.net ×1

foreach ×1

oop ×1