Tôi có một vấn đề thú vị khi một lớp kế thừa từ một lớp thực hiện IEnumerable, nhưng tôi cũng muốn lớp thực hiện IEnumerable cho một kiểu khác. Mọi thứ hoạt động ngoại trừ các phương thức mở rộng của IEnumerable, có nghĩa là tôi không thể thực hiện bất kỳ LINQ nào với các đối tượng theo mặc định mà không phải luôn luôn truyền trước. Có ai có bất kỳ ý tưởng ngoài việc liên tục đúc?Tại sao tôi không thể sử dụng LINQ to Objects khi lớp của tôi triển khai IEnumerable <T> nhiều lần?
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 { }
}
Đối tượng xe tải của bạn có kế thừa hai loại IEnumerable không? Làm thế nào để bạn mong đợi trình biên dịch để tìm ra loại enumerable bạn muốn sử dụng, hãy thử upcasting vào một trong những bạn muốn và sau đó chọn FirstOrDefault –