Compiler Error 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 IEnumeratorT <>, das bedeutet, gibt keine eindeutige Enumeration des Typs, den foreach verwenden kann. Geben Sie den Typ von IEnumeratorT <> an oder verwenden Sie ein anderes Schleifenkonstrukt.

Beispiel

Im folgenden Beispiel wird 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;  
    }  
}