我按如下方式创建了一个类型Person,运行正常。
type Person =
{ First: string; Last : string }
override this.ToString() = sprintf "%s, %s" this.First this.Last
但是当我尝试按如下方式列出Person列表时。
let people =
new List<_>(
[|
{First = "Bhushan"; Last = "Shinde"}
{ First = "Abhi"; Last = "Jad"}
|])
它给出错误:没有构造函数可用于类型'List&lt;'a&gt;'
有人可以解释一下是什么问题吗?
谢谢。
答案 0 :(得分:8)
在F#中,名称List<_>
用于引用不可变的F#列表(在F#核心库中定义)。
如果要创建可变的.NET列表(System.Collections.Generic.List<_>
),则需要使用F#库ResizeArray<_>
中定义的别名(或者您需要使用完全限定名称):< / p>
let people =
new ResizeArray<_>(
[|
{First = "Bhushan"; Last = "Shinde"}
{ First = "Abhi"; Last = "Jad"}
|])
如果你想创建一个普通的F#列表(并在功能样式中使用它),那么你可以使用列表推导语法而不将值传递给任何构造函数:
let people =
[ {First = "Bhushan"; Last = "Shinde"}
{ First = "Abhi"; Last = "Jad"} ]