Yield return: qaytish elementini belgilaydi yield break
Download 63.55 Kb.
|
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: yield return:qaytish elementini belgilaydi yield break: ketma-ketlik endi elementlarga ega emasligini bildiradi Kichik bir misolni ko'rib chiqing: __________________________________________________________________ Numbers numbers = new Numbers(); foreach (int n in numbers) { Console.WriteLine(n); } class Numbers { public IEnumerator { 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 { 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling