yield nomi C# tilida kontekstli kalit so'z sifatida xizmat qiladi. Bu shuni anglatadiki, u faqat iterator blokida maxsus maqsadga ega. Undan blokdan tashqarida har qanday boshqa identifikatorga o'xshash tarzda foydalanish mumkin.
Shuni alohida ta'kidlash kerakki, iterator boshqa turdagi qator yoki to'plamga tayanmasligi kerak. U faqat elementlarning to'plamidan keyingi elementni qaytarishi kerak. Bu shuni anglatadiki, elementlar tegishli algoritm bilan dinamik ravishda qurilishi mumkin. Misol tariqasida, quyida yuqoridagi dasturning versiyasi keltirilgan bo'lib, unda ingliz alifbosidagi barcha harflar katta registrda yozilgan. Qator o'rniga harflar for siklida hosil qilinadi.
// Iterator yordamida o'z navbatida qaytarilgan qiymatlarning
//dinamik qurilishiga misol.
using System;
using System.Collections;
class MyClass {
char ch = 'A';
// Ushbu iterator katta harflar bilan yozilgan
//ingliz alifbosidagi harflarni qaytaradi.
public IEnumerator GetEnumerator() {
for(int i=0; i < 26; i++)
yield return (char) (ch + i);
}
}
class ItrDemo2 {
static void Main() {
MyClass mc = new MyClassO;
foreach(char ch in mc)
Console.Write(ch + " ") ;
Console.WriteLine();
}
}
Bu dasturning natijasi quyidagicha.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
2. Iteratorning uzilishi.
Iteratorning erta uzilishi uchun yield operatorining quyidagi shakli xizmat qiladi.
yield break;
Ushbu operator amalga oshirilganda, iterator to'plamning oxiriga yetganligini bildiradi. Aslida, iteratorning o'zi to'xtaydi.
Do'stlaringiz bilan baham: |