|
Une Collection Enumérable |
|
|
Introduction |
|
L'interface d'IEnumerator est employée pour établir une collection pour l'énumération. L'IEnumerator ne fournit pas la fonctionnalité nécessaire pour employer le foreach. La prochaine étape est de mettre en application une autre interface appelée IEnumerable. Tandis que l'interface d'IEnumerator est employée pour identifier la classe qui tient chaque valeur qui sera visitée, l'interface d'IEnumerable est employée pour communiquer avec la collection dont les articles seront énumérés. Pour cette raison, en mettant en application cette classe, vous devriez fournir les moyens d'accéder à la collection externe. Ceci peut être fait en passant une collection de la classe qui tient les valeurs, à un constructeur de l'applicateur d'IEnumerable. |
Pour mettre en application l'interface d'IEnumerable, commencer par dériver une classe à partir de elle. Tandis que la classe mise en application par l'interface d'IEnumerator représente un objet, la classe qui met en application l'IEnumerable est une collection. Voici un exemple : public class Enumerable : IEnumerable
{
}
Noter que la nouvelle classe ne connaît pas quelle collection on lui invitera à énumérer. Pour cette raison, dans la nouvelle classe, vous devriez déclarer une variable de membre de la classe qui tient les valeurs qui seront énumérées. Si la collection ranger-est basée, vous pouvez créer le champ comme suit : public class Enumerable : IEnumerable
{
private double[] numbers;
}
Par la suite, quand instantiating l'applicateur d'IEnumerable, vous devrez lui passer une collection de valeurs. Pour faire ce possible, vous pouvez créer une méthode dans la nouvelle classe et lui passer cette collection d'objets. Voici un exemple: public class Enumerable : IEnumerable
{
private double[] numbers;
public void Identify(double[] values)
{
}
}
Dans cette méthode, vous pouvez assigner la variable de membre à l'argument. Vous devriez également affecter chaque membre de l'argument à son équivalent du membre de l'argument. Ceci peut être fait comme suit : public class Enumerable : IEnumerable
{
private double[] numbers;
public void Identify(double[] values)
{
numbers = values;
for (int i = 0; i < values.Length; i++)
numbers[i] = values[i];
}
}
Pour soutenir l'utilisation de la boucle de foreach, l'interface d'IEnumerable est équipée (seulement) d'une méthode appelée GetEnumerator que vous devez mettre en application. La méthode d'IEnumerable.GetEnumerator () renvoie un objet d'IEnumerator. En appliquant cette méthode, vous pouvez renvoyer un objet de la classe qui met en application l'interface d'IEnumerator, lui passant la collection qui a été déclarée dans l'applicateur d'IEnumerable. Ceci peut être fait comme suit : public class Enumerable : IEnumerable
{
private double[] numbers;
public void Identify(double[] values)
{
numbers = values;
for (int i = 0; i < values.Length; i++)
numbers[i] = values[i];
}
public IEnumerator GetEnumerator()
{
return new Enumerator(numbers);
}
}
Après avoir mis en application l'IEnumerator et les interfaces d'IEnumerable, vous pouvez alors employer la boucle de foreach. Pour commencer, vous devez préparer la collection et ses articles pour le traitement. Voici un exemple : class Program
{
static int Main(string[] args)
{
double[] numbers = new double[5];
numbers[0] = 224.52;
numbers[1] = 60.48;
numbers[2] = 1250.64;
numbers[3] = 8.86;
numbers[4] = 1005.36;
return 0;
}
}
Pour énumérer la collection, déclarer une variable basée sur l'applicateur de l'IEnumerable et passer la collection à son constructeur. Une fois que ceci est fait, vous pouvez alors utilisateur le foreach. Voici un exemple : using System;
using System.Collections;
public class Enumerator : IEnumerator
{
private double[] numbers;
private int cur;
public Enumerator(double[] list)
{
this.numbers = list;
cur = -1;
}
public Object Current
{
get { return numbers[cur]; }
}
public void Reset()
{
cur = -1;
}
public bool MoveNext()
{
cur++;
if (cur < numbers.Length)
return true;
else
return false;
}
}
public class Enumerable : IEnumerable
{
private double[] numbers;
public void Identify(double[] values)
{
numbers = values;
for (int i = 0; i < values.Length; i++)
numbers[i] = values[i];
}
public IEnumerator GetEnumerator()
{
return new Enumerator(numbers);
}
}
class Program
{
static int Main(string[] args)
{
double[] numbers = new double[5];
numbers[0] = 224.52;
numbers[1] = 60.48;
numbers[2] = 1250.64;
numbers[3] = 8.86;
numbers[4] = 1005.36;
Enumerable coll = new Enumerable();
coll.Identify(numbers);
foreach (double d in coll)
Console.WriteLine("Item {0}", d); ;
return 0;
}
}
|
|
|
||
| Précédent | Copyright © 2007, Yevol | Suivant |
|
|
||