Compilerfehler CS1640

Die foreach-Anweisung kann für Variablen vom Typ „Typ“ nicht verwendet werden, da sie mehrere Instanziierungen von „Schnittstelle“ implementiert. Nehmen Sie eine Umwandlung in eine spezifische Schnittstelleninstanziierung vor.

Der Typ erbt von mindestens zwei Instanzen von IEnumerator<T>, das bedeutet, es gibt keine eindeutige Enumeration des Typs, den foreach verwenden kann. Geben Sie den Typ von IEnumerator<T> an oder verwenden Sie ein anderes Schleifenkonstrukt.

Beispiel

Im folgenden Beispiel wird der Fehler CS1640 generiert:

// CS1640.cs  

using System;  
using System.Collections;  
using System.Collections.Generic;  

public class C : IEnumerable, IEnumerable<int>, IEnumerable<string>  
{  
    IEnumerator<int> IEnumerable<int>.GetEnumerator()  
    {  
        yield break;  
    }  

    IEnumerator<string> IEnumerable<string>.GetEnumerator()  
    {  
        yield break;  
    }  

    IEnumerator IEnumerable.GetEnumerator()  
    {  
        return (IEnumerator)((IEnumerable<string>)this).GetEnumerator();  
    }  
}  

public class Test  
{  
    public static int Main()  
    {  
        foreach (int i in new C()){}    // CS1640  

        // Try specifing the type of IEnumerable<T>  
        // foreach (int i in (IEnumerable<int>)new C()){}  
        return 1;  
    }  
}