我写了这个扩展方法(编译):
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;
}
下面的代码导致编译时错误(找不到合适的方法),为什么?:
IEnumerable<IEnumerable<int>> foo = new int[2][];
var bar = foo.Flatten();
如果我实现如下扩展,则不会出现编译时错误:
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;
}
编辑(2):这个问题我认为已经回答,但它提出了另一个关于重载解决和类型约束的问题。我在这里提出的这个问题:为什么类型约束不是方法签名的一部分?