Errore del compilatore CS0202

Aggiornamento: novembre 2007

Messaggio di errore

foreach richiede che il tipo restituito 'tipo' di 'type.GetEnumerator()' sia associato a un metodo MoveNext pubblico adatto e a una proprietà Current pubblica.
foreach requires that the return type 'type' of 'type.GetEnumerator()' must have a suitable public MoveNext method and public Current property

Una funzione GetEnumerator, implementata per consentire l'uso delle istruzioni foreach, non deve restituire un puntatore o una matrice, ma un'istanza di una classe che può fungere da enumeratore. Nei requisiti da soddisfare per fungere da enumeratore sono inclusi la proprietà public Current e il metodo public MoveNext.

Nota:

In C# 2.0 il metodo MoveNext e la proprietà Current vengono generati automaticamente. Per ulteriori informazioni, vedere il codice di esempio in Interfacce generiche (Guida per programmatori C#).

Il seguente codice di esempio genera l'errore CS0202:

// CS0202.cs

public class C1
{
   public int Current
   {
      get
      {
         return 0;
      }
   }

   public bool MoveNext ()
   {
      return false;
   }

   public static implicit operator C1 (int c1)
   {
      return 0;
   }
}

public class C2
{
   public int Current
   {
      get
      {
         return 0;
      }
   }

   public bool MoveNext ()
   {
      return false;
   }

   public C1[] GetEnumerator ()
   // try the following line instead
   // public C1 GetEnumerator ()
   {
      return null;
   }
}

public class MainClass
{
   public static void Main ()
   {
      C2 c2 = new C2();

      foreach (C1 x in c2)   // CS0202
      {
         System.Console.WriteLine(x.Current);
      }
   }
}