F#扩展锯齿阵列类型

F#扩展锯齿阵列类型,f#,type-extension,F#,Type Extension,我已经读过这个问题和答案,它非常接近我不想做的事情。是否可以扩展类型'T[][],就像扩展'T[]一样?锯齿数组[][]是一个专门用于另一个数组的数组[] 您可以使用二维数组[,]: type 'T ``[,]`` with member a.First = a.GetValue(0,0) (array2D [| [| 1 .. 10 |] ; [| 11 .. 20 |] |] ).First 但是,如果您确实想使用[]],则不能使用此F#特定的表示法,因为此表示法反映了类型定义,

我已经读过这个问题和答案,它非常接近我不想做的事情。是否可以扩展类型
'T[][]
,就像扩展
'T[]
一样?

锯齿数组
[][]
是一个专门用于另一个数组的数组
[]

您可以使用二维数组
[,]

type 'T ``[,]`` with
    member a.First = a.GetValue(0,0)

(array2D [| [| 1 .. 10 |] ; [| 11 .. 20 |] |] ).First
但是,如果您确实想使用
[]]
,则不能使用此F#特定的表示法,因为此表示法反映了类型定义,所以无法将其声明为专用,因此您必须使用.NET方式:

[<System.Runtime.CompilerServices.Extension>]
module Extensions =

    [<System.Runtime.CompilerServices.Extension>]   
    let First   (x  :_ [][]) = x.[0].[0]
[]
模块扩展=
[]   
让第一个(x:[]]]=x[0][0]

从C#访问时它会工作,但从F#我认为您需要F#3.1

是的,这是可能的。但是
'T[][]
'T[,]
不是同一类型-或者我在这里遗漏了什么?你是对的,它们不一样,但是'T[][]是一个以数组为元素的普通数组。因此,如果你想这样使用它,你可以按照你链接的答案所示的方式进行扩展。如果您试图为特定类型中专用的泛型类型指定扩展,我认为使用该表示法是不可能的,但是您可以使用标准的.NET方法来完成。但你需要F#3.1