【问题标题】:error FS1133: No constructors are available for the type 'List<'a>'错误 FS1133:没有可用于类型“列表<'a>”的构造函数
【发布时间】:2012-03-01 09:47:24
【问题描述】:
我创建了一个 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'的构造函数
谁能解释一下是什么问题?
谢谢。
【问题讨论】:
标签:
f#
f#-interactive
f#-scripting
【解决方案1】:
在 F# 中,名称 List<_> 用于引用不可变的 F# 列表(在 F# 核心库中定义)。
如果您想创建可变的 .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"} ]