我写了这个扩展方法(编译):平展IEnumerable <IEnumerable <>>;了解泛型
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):这个问题我考虑的回答,但它提出了关于另外一个问题重载解析和类型约束。我把这个问题放在这里:Why aren't type constraints part of the method signature?
您的编辑不起作用,因为您有太多的周围的enumerable。 'foo.Flatten,int>();'应该工作。 –
dlev
2012-02-25 02:20:53