컴파일러 오류 CS1640

foreach 문은 ‘interface’의 여러 인스턴스화를 구현하기 때문에 ‘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;  
    }  
}