Kompilatorfel CS1640

foreach-instruktionen kan inte användas på variabler av typen "typ" eftersom den implementerar flera instansieringar av "gränssnitt", prova att casta till en specifik gränssnittsinstansiering

Typen ärver från två eller flera instanser av IEnumerator<T>, vilket innebär att det inte finns någon unik uppräkning av den typ som foreach kan användas. Ange typen av IEnumerator<T> eller använd en annan loopkonstruktion.

Exempel

Följande exempel genererar 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;  
    }  
}