2

我想知道为什么第二行告诉我灵活的类型受到了限制。显然可以绕过它,但是从中可以吸取一些教训吗?

type DataTable with
    static member FromObjArray     (input : seq<#seq<'T>>) =  ()  //keep the flexibility
    static member FromObjArray<'T> (input : seq<#seq<'T>>) =  ()  //constrained to seq
4

1 回答 1

3

我认为灵活类型在第二种情况下受到限制,因为您将该方法显式声明为只有一个类型参数的泛型方法'T。灵活类型被取消到另一个类型参数,如果您使参数显式,编译器将无法添加该(隐藏)类型参数。

第一个声明对应于如下内容:

static member FromObjArray<'T, 'S when 'S :> seq<'T>> (input : seq<'S>) =  ()

如果你明确说该方法只接受类型参数'T,那么编译器就无法生成这样的方法(因为它需要为'S从序列派生的类型添加)。

于 2013-03-01T12:23:47.743 回答