Почему я не могу использовать LINQ to Objects, если мой класс несколько раз реализует IEnumerable ?

У меня есть интересная проблема, когда класс наследуется от класса, реализующего IEnumerable, но я также хочу, чтобы этот класс реализовал IEnumerable для другого типа. Работает все, кроме методов расширения IEnumerable, что означает, что я не могу выполнять LINQ для объектов по умолчанию, не всегда выполняя приведение сначала. Есть ли у кого-нибудь идеи, кроме постоянного преобразования?

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 { }
}     
7
задан Daryl 24 June 2011 в 19:09
поделиться