Error del compilador CS1640
Actualización: noviembre 2007
Mensaje de error
La instrucción foreach no puede funcionar en variables de tipo 'tipo' porque implementa varias creaciones de instancias de 'interfaz', intente convertir en una creación de instancia de interfaz específica
foreach statement cannot operate on variables of type 'type' because it implements multiple instantiations of 'interface', try casting to a specific interface instantiation
El tipo hereda de dos o más instancias de IEnumerator<T>. Esto significa que no hay una enumeración única del tipo utilizable por foreach. Especifique el tipo de IEnumerator<T> o utilice otra construcción de bucle.
Ejemplo
El código siguiente genera el error 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 specifing the type of IEnumerable<T>
// foreach (int i in (IEnumerable<int>)new C()){}
return 1;
}
}