Поддерживает ли неуниверсальная версия IEnumerable отложенное выполнение? - PullRequest
3 голосов
/ 07 января 2011

Если да, то в каких версиях .NET Framework он поддерживается?

Я протестировал это на .NET Framework 4.0, и он отлично работает:

using System;
using System.Collections.Generic;

public class TestClass
{
    public IEnumerable Defer()
    {
        yield return 1;
        yield return 2;
        yield return 3;
    }
}

Ответы [ 3 ]

4 голосов
/ 07 января 2011

Да, он поддерживается с момента появления ключевого слова yield. Разница лишь в том, что он более или менее равен IEnumerable<object>, что может привести к неэффективности, если он должен заниматься боксом. Кроме того, это точно так же.

1 голос
/ 12 января 2011

Неуниверсальный IEnumerable не реализует IDisposable.Может случиться так, что VB.Net и C # будут использовать тип утки либо IDisposable, либо метод .Dispose () при использовании перечислителя, который не поддерживает IEnumerable (Of T), но, конечно, нельзя полагаться на всех потребителей неуниверсальногоЭто бесчисленное множество.Если потребитель перечислимого объекта не выполняет должным образом .Dispose (), выполнение перечислителя , включая явные или неявные предложения finally , будет прекращено.

1 голос
/ 07 января 2011

Поскольку ключевые слова yield сокращены до хитрости компилятора, предположительно это должно работать. Это, безусловно, работает для среды выполнения 2.0; Однако я бы не стал делать какие-либо заявления по поводу 1.1.

...