2014-01-22 108 views

回答

3

鋸齒狀陣列[][]是專門用於另一陣列的陣列[]

您可以使用[,]這是一個二維數組:

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] 

從C#訪問時,它會正常工作,但是從F#我想你將需要F#3.1

+0

是的,這是可以做到的。但是'''T [] []''和''T [,]''不是同一類型 - 或者我在這裏錯過了什麼? – torbonde

+0

你是對的他們不一樣,但'T [] []是一個正常的數組有數組作爲元素。所以,如果你想像這樣使用它,你可以按照你所鏈接的答案中顯示的方式來擴展它。如果你想爲一個特定類型的泛型指定一個擴展,我認爲這是不可能的,但是你可以使用標準的.NET方法。但你需要F#3.1 – Gustavo

+0

非常感謝!我會牢記這一點。 – torbonde