Tengo un problema interesante en el que una clase hereda de una clase que implementa IEnumerable, pero también quiero que la clase implemente IEnumerable para un tipo diferente. Todo funciona, excepto los métodos de extensión IEnumerable, lo que significa que no puedo hacer ningún LINQ a los objetos por defecto sin tener que lanzar primero. ¿Alguien tiene alguna idea además de lanzar constantemente?¿Por qué no puedo usar LINQ to Objects cuando mi clase implementa IEnumerable <T> varias veces?
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqTesting
{
public class Trucks<T> : Vehicles, IEnumerable<Truck>
{
public Trucks()
{
// Does Compile
var a = ((IEnumerable<Truck>)this).FirstOrDefault();
// Doesn't Compile, Linq.FirstOrDefault not found
var b = this.FirstOrDefault();
}
public new IEnumerator<Truck> GetEnumerator() { throw new NotImplementedException(); }
}
public class Vehicles : IEnumerable<Vehicle>
{
public IEnumerator<Vehicle> GetEnumerator() { throw new NotImplementedException(); }
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw new NotImplementedException(); }
}
public class Vehicle { }
public class Truck : Vehicle { }
}
¿Su objeto de camión no está heredando dos tipos de IEnumerable? ¿Cómo espera que el compilador descubra qué tipo enumerable desea usar, intente redirigir a la que desea y luego seleccione FirstOrDefault –