Как перед выполнением метода IEnumerable <T>метод возвращает результат в C #? - PullRequest
0 голосов
/ 06 декабря 2018

Ниже блока кода, который отображает числа больше 2 из MyList.

using System;
using System.Collections.Generic;
namespace CSharpBasics
{
    internal class Program
    {
        private static List<int> MyList = new List<int>();
        private static void Main(string[] args)
        {
            MyList.Add(1);
            MyList.Add(2);
            MyList.Add(3);
            MyList.Add(4);
            var test = FilterWithYield();
            foreach (int i in test)
            {
                Console.WriteLine(i);
            }
            Console.ReadLine();
        }
        private static IEnumerable<int> FilterWithYield()
        {
            foreach (int i in MyList)
            {
                if (i > 2)
                {
                    yield return i;
                }
            }
        }
    }
}

Теперь, когда мы устанавливаем точку останова на строку foreach (int i in test), перед выполнением *Переменная 1007 * loop , test будет иметь результат из FilterWithYield().Как это возможно? Я понимаю, что до начала итерации метод IEnumerable никогда не выполнялся.

Я что-то здесь упускаю?

enter image description here

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

test - это перечисляемое - по сути, поставщик перечислителя;при перечислении перечислитель выбирается итеративно.Сейчас;перечислитель и перечисляемый обычно различаются, но перечисляемый (test) по-прежнему что-то , и что что-то все еще имеет некоторое состояние, которое IDE может исследовать.IDE может обнаруживать перечислимые значения, а повторяет их для вас для отображения содержимого.На самом деле это может быть очень неудобно в некоторых случаях (когда последовательность не повторяется).Следовательно, IDE предупредил вас об этом до того, как вы щелкнули по нему - см. «Расширение представления результатов будет перечислять IEnumerable».

0 голосов
/ 06 декабря 2018

Посмотрите на предупреждение - Expanding the Result View will enumerate the IEnumerable… Просматривая результаты, вы перечисляете значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...