vishwjeet Ответов: 1

доходность возврат


Привет,
Я использую перечисляемую функцию, использующую "yield return". Это позволяет мне перебирать элементы, используемые для каждого цикла. Поскольку это ленивая оценка, после каждой итерации элемент управления возвращается к вызывающей функции.

Как я могу использовать перечисляемую функцию без каждого цикла?

публичный статический тип IEnumerable и Л;int> У GetValuesUpto(инт Н)
{

for(int ctr = 1;ctr<=n;ctr++)
{
доходность возврат Суу;
}
}

Итак, когда я вызываю эту функцию, т. е.
int[] arr = GetValuesUpto(10);

Каков будет результат, будет ли он работать как ленивая оценка и вернет только первое значение, или он вернет желаемый результат?

Жду ваших ответов, ребята!!
Вишвджит

1 Ответов

Рейтинг:
0

Abhishek Sur

Блоки итератора вызываются, когда вы хотите извлечь данные из перечисляемого объекта.

На самом деле, если вы вызовете функцию the, она не будет вызвана. Скорее всего, если вы сделаете foreach для перечисляемого объекта, то функция будет вызвана и вернет вам 10. ;-)

Просто немного измените свой код, как это сделал я:

<br />IEnumerable<int> arr = Documented.GetValuesUpto(10);<br />MessageBox.Show(arr.ToList<int>().Count.ToString());


public static IEnumerable<int> GetValuesUpto(int n)<br />{<br /><br />    for (int ctr = 1; ctr <= n; ctr++)<br />    {<br /><br />       yield return ctr;<br />    }<br />            <br />}


Поставьте точку останова в строке IEnumerable<int> arr = Documented.GetValuesUpto(10);. а также точка останова внутри GetValueUpto блок. Вы увидите, что функция вызывается, когда мы пытаемся вызвать ToList() вместо фактического вызова к GetValueUpto Это главное преимущество итераторных блоков.

[Роза][Роза]