可能重复:
泛型扩展方法没有类型推断
考虑以下两种方法:
public static IEnumerable<V> Merge<V>
(this IEnumerable<IEnumerable<V>> coll)
public static IEnumerable<V> Merge<T, V>
(this IEnumerable<T> coll)
where T : IEnumerable<V>
两种写法都可以很好地编译通过,对于泛型类型,编译期间调用者已知其类型,因此也就知道了扩展类型的确切类型。
你可以成功地调用这两个方法,但只有第一个方法作为扩展方法才有效。
为什么呢?
更新1
为了演示失败情况,使用第二种方法并以以下示例:
var x = new List<List<int>>();
var y = x.Merge();
更新 -- 结束
你们不觉得原帖子过于复杂,难以理解吗?出于教育目的,即使在技术上(也就是答案方面)属于重复,我认为这篇文章不应该被关闭。这只是我的个人看法。