Erreur du compilateur CS1640

L’instruction foreach ne peut pas fonctionner sur des variables de type 'type', car elle implémente plusieurs instanciations de 'interface', essayez d’effectuer un cast en une instanciation d’interface spécifique

Le type hérite de deux instances d’IEnumerator<T> (ou davantage), ce qui signifie qu’il n’y a pas une énumération unique du type que foreach pourrait utiliser. Spécifiez le type d’IEnumerator<T> ou utilisez une autre construction de bouclage.

Exemple

L’exemple suivant génère l’erreur CS1640 :

// 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 specifying the type of IEnumerable<T>  
        // foreach (int i in (IEnumerable<int>)new C()){}  
        return 1;  
    }  
}