Pregunta

Tengo una clase similar al siguiente que utiliza una lista interna:

public class MyList<T> : IEnumerable<T>
{
        private List<T> _lstInternal;
        public MyList()
        {
            _lstInternal = new List<T>();
        }
        public static implicit operator List<T>(MyList<T> toCast)
        {
            return toCast._lstInternal;
        }

}

Cuando intento de pasar MyList<object> a una función que toma un List<object>, consigo un InvalidCastException. ¿Por qué?

¿Fue útil?

Solución

Uso de la clase que ha descrito, el siguiente código que funcionó para mí:

static void Main(string[] args)
{
   MyList<object> foo = new MyList<object>();

   MyMethod(foo);
}

static void MyMethod(List<object> things)
{
   // No InvalidCastException when called...
}

Lo único que ha cambiado desde la clase MyList<T> informados en su pregunta fue la adición de la siguiente implementación de IEnumerable<T>:

IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
    return _lstInternal.GetEnumerator();
}

IEnumerator IEnumerable.GetEnumerator()
{
    return _lstInternal.GetEnumerator();
}

No es muy seguro por qué recibe una excepción, salvo como he mencionado en mi comentario, estoy usando C # versión 4.0. Qué versión está usando?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top