【问题标题】: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&lt;_&gt; 用于引用不可变的 F# 列表(在 F# 核心库中定义)。

    如果您想创建可变的 .NET 列表 (System.Collections.Generic.List&lt;_&gt;),您需要使用在 F# 库中定义的别名 ResizeArray&lt;_&gt;(或者您需要使用完全限定名称):

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多