Partager via


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 :

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);
      }
   }
}