C#. L’ús de yield en iteradors
30.03.2008 13:29 yield
representa una forma senzilla de construir iteradors sense haver de fer servir les ordres current
i moveNext
. De forma que podem implementar un recorregut per una llista, (amb foreach
per exemple), i anar extreient de la llista sense necessitat de controlar la posició de l’apuntador.
Veiem un exemple. Crearem una classe de dades per a crear després una llista i treballar amb ella. Aquesta classe es molt senzilla, li direm classeDades
:<br>
class classeDades
{
private string mDades;
public classeDades(string pDada) {
dades = pDada;
}
public string dades {
get {
return mDades;
}
set {
mDades = value;
}
}
}
Després, al main del projecte, podem crear una demo senzilla de l'ús de l'iterador. Haurem de crear una llista per poder treballar amb ella. Això ho farem així:
static void Main(string[] args) {
List l = new List();
l.Add(new classeDades(”Hola”));
l.Add(new classeDades(”Adeu”));
l.Add(new classeDades(”Que tal”));
l.Add(new classeDades(”Potser som tres”));
l.Add(new classeDades(”Dos paraules”));
l.Add(new classeDades(”Una”));
IEnumerable ie = getEnumerable(l, 2);
foreach (classeDades cd in ie) {
Console.WriteLine(cd.dades);
}
}
Veiem que el que fem aquí es crear una llista de treball, (l), i posteriorment cridem a una funció, (
getEnumerable
), que ens retornarà una subllista de components de la llista l
que compleixen uns requisits. Veiem aquesta funció:
public static IEnumerable getEnumerable(IEnumerable pLlista, int pParaules) {
foreach (classeDades cd in pLlista) {
if (cd.dades.Split(’ ‘).Length == pParaules)
yield return cd;
}
}
Aquí agafem inicialment la llista que hem creat abans i la recorrem amb
foreach
. Per a cada element de la llista comprovem si acompleix la condició. La condició es si la dada te un nombre concret de paraules. Només retornarà els elements de la llista que tenen X paraules. Si acompleix la condició la retorna fent servir yield
.
Descarrega el codi font aquí:
Iteració.zip (19 kB)
———
TornarTopic: C#. L’ús de yield en iteradors
No sʼhan trobat comentaris