The threat of understanding the problem in C #

I hope to get some clarification on the snippet that I recently went through the debugger, but just can't figure it out.

I am taking C # course on PluralSight , and the current section is on yieldand returns IEnumerable<T>with the keyword.

I have this overly basic function that returns a collection IEnumerable Vendors(simple class with Id, CompanyNameand Email):

public IEnumerable<Vendor> RetrieveWithIterator()
{
    this.Retrieve(); // <-- I've got a breakpoint here
    foreach(var vendor in _vendors)
    {
        Debug.WriteLine($"Vendor Id: {vendor.VendorId}");
        yield return vendor;
    }
}

And I have this code in unit test, which I use to test the function:

var vendorIterator = repository.RetrieveWithIterator(); // <-- Why don't it enter function?
foreach (var item in vendorIterator) // <-- But starts here?
{
    Debug.WriteLine(item);
}
var actual = vendorIterator.ToList();

, , , , RetrieveWithIterator , , IEnumerable (. ).

+4
3

, yield , .

, :

public IEnumerable<int> InfiniteOnes()
{
     while (true)
         yield 1;
}

, :

var infiniteOnes = InfiniteOnes();

, StackOverflow, .

, , :

var infiniteOnes = InfiniteOnes();
//.... some code
foreach (var one in infiniteOnes.Take(100)) { ... }

foreach (var one in infiniteOnes.Take(10000)) { ... }

Iterator , ; , , .

+4

msdn:

, , . , , , . .

# yield ( yield-return) . IEnumerator IEnumerator<T> ( ).

var vendorIterator = repository.RetrieveWithIterator(); // <-- Lets deferred the execution
foreach (var item in vendorIterator) // <-- execute it because we need it
{
    Debug.WriteLine(item);
}
var actual = vendorIterator.ToList();

, , , , .

  • . .
  • . .

, . , , .

+1

, . , 4 , , , !

MS Docs:

yield, . , foreach LINQ. foreach . , , . , . break break .

. .ToList() , , , , .

0

Source: https://habr.com/ru/post/1680287/


All Articles