2012-08-23 57 views
1

我想在F#中使用第三方C#庫。 C#作者重載了一個字段,我試圖設置該對象本身接收該值。隨着道歉速記和不完整的代碼段中,C#是這樣的:F#賦值過載C#屬性

public class cls1 { public List<cls2> prop1; } 
public class cls2 { private double[,] prop2; 
        public object this[int r,int c] 
         {set {this.prop2[r,c]=value;} } 
        } 

要設置cls2.prop2,這部作品在C#:

cls1.prop1[0][0, 0] = 0.0

在F#這個失敗,出現錯誤"Invalid expression on left of assignment"

cls1.prop1[0][0, 0] <- 0.0

有人能提供一個提示,一條前進的道路?謝謝。

+0

目前還不清楚「超載場」是什麼意思 - 您是否只是指「提供索引器」? –

+0

謝謝,墊子。這做到了。 – user1620348

+0

@ user1620348:爲了解決這個問題,我發佈了評論作爲答案。 – pad

回答

4

正確的F#的語法是:

cls1.prop1.[0].[0, 0] <- 0.0 

Arrays頁面上MSDN:

You can access array elements by using a dot operator (.) and brackets ([ and ]). 
+1

我討厭F#中的點陣訪問。 :( – gradbot

+0

你可以使用[Array.get](http://msdn.microsoft.com/en-us/library/ee370501),有時它會給出更好的功能組合:)。 – pad

1

你分配到indexed property。有兩種方法來引用索引屬性:

x.[0, 0] //array syntax 

x.Item(0, 0) //method syntax 

如果屬性名爲Item,這是在C#中定義的任何索引屬性的情況下,前者只適用。但是,在F#中,名稱可以是任意的。