我想知道为什么第二行告诉我灵活类型受到限制。 显然,人们可以解决这个问题,但是从中可以获得一些教训吗?
type DataTable with
static member FromObjArray (input : seq<#seq<'T>>) = () //keep the flexibility
static member FromObjArray<'T> (input : seq<#seq<'T>>) = () //constrained to seq
答案 0 :(得分:3)
我认为灵活类型在第二种情况下受到限制,因为您只使用一个类型参数'T
将该方法显式声明为泛型方法。如果您将参数设置为显式,则灵活类型将被移植到另一个类型参数,并且编译器无法添加该(隐藏)类型参数。
第一个声明对应于这样的内容:
static member FromObjArray<'T, 'S when 'S :> seq<'T>> (input : seq<'S>) = ()
如果你明确说这个方法只接受类型参数'T
,那么编译器就不能生成这样的方法(因为它需要为从序列派生的类型添加'S
)。