2012-03-01 28 views
0

我創建了一個類型Person,如下運行正常。錯誤FS1133:沒有構造函數可用於類型'列表<'a>'

type Person = 
    { First: string; Last : string } 
    override this.ToString() = sprintf "%s, %s" this.First this.Last 

但是,當我嘗試按如下方式創建人員列表。

let people = 
    new List<_>( 
     [| 
      {First = "Bhushan"; Last = "Shinde"} 
      { First = "Abhi"; Last = "Jad"} 
     |]) 

它給人的錯誤:沒有構造函數可用於類型「列表<‘一>’

能有人請解釋是什麼問題?

謝謝。

回答

7

在F#中,名稱List<_>用於指不可變的F#列表(在F#core library中定義)。

如果你想創建可變.NET列表(System.Collections.Generic.List<_>),您需要使用在F#庫ResizeArray<_>定義的別名(或者你需要使用完全合格的名稱):

let people = 
    new ResizeArray<_>( 
     [| 
      {First = "Bhushan"; Last = "Shinde"} 
      { First = "Abhi"; Last = "Jad"} 
     |]) 

如果你想創建一個正常的F#列表(並在功能風格中使用它),那麼你可以使用列表理解語法,而不必將值傳遞給任何構造函數:

let people = 
     [ {First = "Bhushan"; Last = "Shinde"} 
      { First = "Abhi"; Last = "Jad"} ] 
+0

謝謝托馬斯! :-) – ivorykoder 2012-03-01 10:13:51

相關問題