コンパイラ エラー CS1640

'interface' の複数のインスタンスを実装するため、foreach ステートメントは、型 'type' の変数では操作できません。特定のインターフェイスのインスタンス化にキャストしてください。

型は IEnumerator<T> の複数のインスタンスから継承しています。これは、foreach で使うことができる型の一意の列挙体がないことを意味します。 IEnumerator<T> の型を指定するか、別のループ構造を使ってください。

次の例では 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;  
    }  
}