Erreur du compilateur CS1579
Mise à jour : novembre 2007
Message d'erreur
L'instruction foreach ne peut pas fonctionner sur des variables de type 'type1', car 'type2' ne contient pas de définition publique pour 'identificateur'
foreach statement cannot operate on variables of type 'type1' because 'type2' does not contain a public definition for 'identifier'
Pour pouvoir parcourir une collection à l'aide de l'instruction foreach, la collection doit réunir les conditions suivantes :
Elle doit être une interface, une classe ou une structure.
Elle doit inclure une méthode publique GetEnumerator qui retourne un type.
Le type de retour doit contenir une propriété publique nommée Current, ainsi qu'une méthode publique nommée MoveNext.
Pour plus d'informations, consultez Comment : accéder à une classe de collection à l'aide de foreach (Guide de programmation C#).
Exemple
Dans cet exemple, foreach n'est pas capable de parcourir la collection parce qu'il n'y a aucune méthode publicGetEnumerator dans MyCollection.
L'exemple suivant génère l'erreur CS1579.
// CS1579.cs
using System;
public class MyCollection
{
int[] items;
public MyCollection()
{
items = new int[5] {12, 44, 33, 2, 50};
}
// Delete the following line to resolve.
MyEnumerator GetEnumerator()
// Uncomment the following line to resolve:
// public MyEnumerator GetEnumerator()
{
return new MyEnumerator(this);
}
// Declare the enumerator class:
public class MyEnumerator
{
int nIndex;
MyCollection collection;
public MyEnumerator(MyCollection coll)
{
collection = coll;
nIndex = -1;
}
public bool MoveNext()
{
nIndex++;
return(nIndex < collection.items.GetLength(0));
}
public int Current
{
get
{
return(collection.items[nIndex]);
}
}
}
public static void Main()
{
MyCollection col = new MyCollection();
Console.WriteLine("Values in the collection are:");
foreach (int i in col) // CS1579
{
Console.WriteLine(i);
}
}
}