tôi đã viết phương pháp này mở rộng (trong đó biên dịch):Flatten IEnumerable <IEnumerable <>>; hiểu Generics
public static IEnumerable<J> Flatten<T, J>(this IEnumerable<T> @this)
where T : IEnumerable<J>
{
foreach (T t in @this)
foreach (J j in t)
yield return j;
}
Đoạn code dưới đây gây ra một lỗi thời gian biên dịch (không có phương pháp phù hợp được tìm thấy), tại sao?:
IEnumerable<IEnumerable<int>> foo = new int[2][];
var bar = foo.Flatten();
Nếu tôi thực hiện phần mở rộng như dưới đây, tôi nhận được không có lỗi thời gian biên dịch:
public static IEnumerable<J> Flatten<J>(this IEnumerable<IEnumerable<J>> @this)
{
foreach (IEnumerable<J> js in @this)
foreach (J j in js)
yield return j;
}
Chỉnh sửa (2): Câu hỏi này tôi xem xét trả lời, nhưng nó lớn lên một câu hỏi liên quan quá tải độ phân giải và loại hạn chế. Câu hỏi này tôi đặt ở đây: Why aren't type constraints part of the method signature?
Chỉnh sửa của bạn không hoạt động vì bạn có quá nhiều vùng lân cận. 'foo.Flatten, int>();' sẽ hoạt động. –
dlev