Yield return: qaytish elementini belgilaydi yield break
Download 63.55 Kb.
|
tsfcsOQYNmo1EkP9FeO7k5euCfrh5g2v
- Bu sahifa navigatsiya:
- Getenumerator()
- Nomlangan iterator
GetEnumerator () usuli iteratorni ifodalaydi. Va biz foreach tsiklida kompaniya ob'ektida ro'yxatga olishni amalga oshirganimizda, hosilning yield return personnel[i];qo'ng'irog'iga murojaat qilinadi. Hosil qaytish bayonotiga kirishda joriy manzil saqlanib qoladi. Va foreach usuli yangi ob'ektni olish uchun keyingi iteratsiyaga o'tganda, iterator shu joydan bajarishni boshlaydi.
Xo'sh, foreach tsiklidagi asosiy dasturda iteratorni amalga oshirish tufayli haqiqiy ro'yxatga olish amalga oshiriladi: __________________________________________________________________ var people = new Person[] { new Person("Tom"), new Person("Bob"), new Person("Sam") }; var microsoft = new Company(people); foreach(Person employee in microsoft) { Console.WriteLine(employee.Name); } __________________________________________________________________ Getenumerator() usulida iteratorni amalga oshirishda for loopida massivni takrorlash ishlatilgan bo'lsa-da, lekin buni qilish shart emas. Biz faqat bir nechta qo'ng'iroqlarni aniqlay olamiz: __________________________________________________________________ public IEnumerator GetEnumerator() { yield return personnel[0]; yield return personnel[1]; yield return personnel[2]; } __________________________________________________________________ Bunday holda, har bir "qaytish rentabelligi" iborasi chaqirilganda, iterator joriy manzilni eslab qoladi va keyingi qo'ng'iroqlar bilan u erdan boshlanadi. Nomlangan iterator Yuqorida biz iteratorni yaratish uchun GetEnumerator usulidan foydalandik. Ammo hosil operatori har qanday usulda ishlatilishi mumkin, faqat shu usul IEnumerable interfeysi ob'ektini qaytarishi kerak. Bunday usullar nomlangan iteratorlar deb ham ataladi. Keling, kompaniya sinfida shunday nomlangan iteratorni yarataylik va undan 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 IEnumerable GetPersonnel(int max) { for (int i = 0; i < max; i++) { if (i == personnel.Length) { yield break; } else { yield return personnel[i]; } } } } __________________________________________________________________ Bu erda aniqlangan iterator - IEnumerable Get Personal(int max) usuli parametr sifatida chiqadigan ob'ektlar sonini oladi. Dastur jarayonida uning qiymati personnel massivining uzunligidan kattaroq bo'lishi mumkin. Va xatolikka yo'l qo'ymaslik uchun yield break operatori ishlatiladi. Ushbu bayonot iteratorning bajarilishini to'xtatadi. Download 63.55 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling