Compilerfehler CS1579Compiler Error CS1579

Eine foreach-Anweisung kann nicht für Variablen vom Typ „Typ1“ verwendet werden, da „Typ2“ keine öffentliche Definition für „Bezeichner“ enthält.foreach statement cannot operate on variables of type 'type1' because 'type2' does not contain a public definition for 'identifier'

Um eine Auflistung mit der foreach-Anweisung zu durchlaufen, muss die Auflistung die folgenden Anforderungen erfüllen:To iterate through a collection using the foreach statement, the collection must meet the following requirements:

  • Der zugehörige Typ muss eine öffentliche parameterlose Methode GetEnumerator aufweisen, deren Rückgabetyp entweder Klasse, Struktur oder Schnittstellentyp ist.Its type must include a public parameterless GetEnumerator method whose return type is either class, struct, or interface type.
  • Der Rückgabetyp der Methode GetEnumerator muss eine öffentliche Eigenschaft namens Current und eine öffentliche parameterlose Methode namens MoveNext aufweisen, deren Rückgabetyp Boolean ist.The return type of the GetEnumerator method must contain a public property named Current and a public parameterless method named MoveNext whose return type is Boolean.

BeispielExample

Im folgenden Beispiel wird CS1579 generiert, weil die Klasse MyCollection nicht die öffentliche Methode GetEnumerator enthält:The following sample generates CS1579 because the MyCollection class doesn't contain the public GetEnumerator method:

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