CS1579-ös fordítási hiba

A foreach utasítás nem működik "type1" típusú változókon, mert a "type2" nem tartalmaz nyilvános definíciót az "azonosító" számára

A gyűjtemény foreach utasítással történő iterálásához a gyűjteménynek meg kell felelnie a következő követelményeknek:

  • Típusának tartalmaznia kell egy nyilvános paraméter nélküli GetEnumerator metódust, amelynek visszatérési típusa vagy osztály, struktúra vagy interfésztípus.
  • A metódus visszatérési típusának tartalmaznia GetEnumerator kell egy nevesített Current nyilvános tulajdonságot és egy nyilvános paraméter nélküli metódustMoveNext, amelynek a visszatérési típusa.Boolean

Példa

Az alábbi minta cs1579-et hoz létre, mert az MyCollection osztály nem tartalmazza a nyilvános GetEnumerator metódust:

// 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.Length);  
      }  
  
      public int Current => 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);  
      }  
   }  
}