为什么带约束的泛型扩展方法不被识别为扩展方法?

gre*_*man 5 c# generics extension-methods constraints

可能重复:
没有使用通用扩展方法的类型推断

考虑两种方法:

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>
Run Code Online (Sandbox Code Playgroud)

两者都编译得很好,在这两种情况下,泛型类型的类型将在调用者的编译时知道,因此是扩展类型的确切类型.

你可以调用两个,但只有第一个作为扩展名.

为什么?

更新1

要查看它失败,请使用第二种方法和示例:

    var x = new List<List<int>>();
    var y = x.Merge();
Run Code Online (Sandbox Code Playgroud)

更新 - 关闭

难道你们不认为原帖是太精心设计得到清晰的画面吗?出于教育目的,我认为这篇文章不应该被关闭,即使技术上(即答案)它是重复的.只需2美分.

Eri*_*ert 4

方法类型推断在进行推断时不考虑约束。

昨天有人问了同样的问题。请参阅我的回答以了解更多详细信息。

通用扩展方法没有类型推断