Yield return: qaytish elementini belgilaydi yield break


Download 63.55 Kb.
bet1/7
Sana24.12.2022
Hajmi63.55 Kb.
#1062569
  1   2   3   4   5   6   7
Bog'liq
tsfcsOQYNmo1EkP9FeO7k5euCfrh5g2v


Iterator asosan qiymatlar to'plamini takrorlash uchun hosil bayonotidan foydalanadigan kod blokini ifodalaydi. Ushbu kod bloki xususiyatlarda usul, operator yoki get blokining tanasini aks ettirishi mumkin.
Iterator ikkita maxsus ko'rsatmadan foydalanadi:

Kichik bir misolni ko'rib chiqing:
__________________________________________________________________
Numbers numbers = new Numbers();
foreach (int n in numbers)
{
Console.WriteLine(n);
}
class Numbers
{
public IEnumerator GetEnumerator()
{
for (int i = 0; i < 6; i++)
{
yield return i * i;
}
}
}
__________________________________________________________________



Raqamlar sinfida getenumerator() usuli aslida iteratorni ifodalaydi. Yield return operatoridan foydalanib, ma'lum bir qiymat qaytariladi (bu holda raqamning kvadrati).
Dasturda foreach tsiklidan foydalanib, biz raqamlar ob'ektini oddiy to'plam sifatida takrorlashimiz mumkin. Foreach loopidagi har bir elementni olgandan so'ng, bitta elementni qaytaradigan va joriy pozitsiyani eslab qoladigan "qaytish rentabelligi" iborasi ishga tushadi.
Iteratorlar tufayli biz oldinga siljiy olamiz va foreach loopida raqamni takrorlashni osonlikcha amalga oshiramiz:
__________________________________________________________________
foreach(var n in 5) Console.WriteLine(n);
foreach (var n in -5) Console.WriteLine(n);
static class Int32Extension
{
public static IEnumerator GetEnumerator(this int number)
{
int k = (number > 0)? number: 0;
for (int i = number - k; i <= k; i++) yield return i;
}
}
__________________________________________________________________

Bunday holda, iterator int yoki System.Int32 turini kengaytirish usuli sifatida amalga oshiriladi. iterator usulida biz aslida 0 dan joriy songacha bo'lgan barcha tamsayı qiymatlarini qaytaramiz. Konsol chiqishi:



Yana bir misol: bizda kompaniyani ifodalovchi va personnel massivida xodimlar sonini - Person ob'ektlarini saqlaydigan kompaniya to'plami bo'lsin. Ushbu to'plamni takrorlash uchun hosil operatoridan foydalanamiz:
__________________________________________________________________
class Person
{
public string Name { get; }
public Person(string name) =>Name = name;
}
class Company
{
Person[] personnel;
public Company(Person[] personnel) => this.personnel = personnel;
public int Length => personnel.Length;
public IEnumerator
GetEnumerator()
{
for (int i = 0; i < personnel.Length; i++)
{
yield return personnel[i];
}
}
}
__________________________________________________________________

Download 63.55 Kb.

Do'stlaringiz bilan baham:
  1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling