错误FS1133:没有构造函数可用于类型'List <'a>'

ivo*_*der 1 f# f#-interactive f#-scripting

我创建了一个类型Person,如下所示,运行正常.

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

但是当我尝试按如下方式制作人员列表时.

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

它给出了错误:没有构造函数可用于'List <'a>'类型

有人可以解释一下是什么问题吗?

谢谢.

Tom*_*cek 8

在F#中,该名称List<_>用于指代不可变的F#列表(在F#核心库中定义).

如果要创建可变的.NET list(System.Collections.Generic.List<_>),则需要使用F#库中定义的别名ResizeArray<_>(或者您需要使用完全限定名称):

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

如果你想创建一个普通的F#列表(并在函数式中使用它),那么你可以使用列表推导语法而不将值传递给任何构造函数:

let people =  
        [ {First = "Bhushan"; Last = "Shinde"}  
          { First = "Abhi"; Last = "Jad"} ]
Run Code Online (Sandbox Code Playgroud)