在F#</t>中创建通用List <t>

时间:2012-08-17 17:23:57

标签: f#

我正在尝试在F#中创建一个标准的.NET List<T>,如下所示:

module Csv

open System;

type Sheet () =
  let rows = new List<Object>()

但是我收到以下错误:

  

List<Object> 类型没有可用的构造函数    C:\…\Csv.fs:6

我做错了什么?

3 个答案:

答案 0 :(得分:25)

作为其他人建议的更简单的替代方法,您可以使用名为ResizeArray<T>的类型。这是F#核心库中定义的System.Collections.Generic.List<T>的类型别名:

type Sheet () = 
  let rows = new ResizeArray<Object>() 

在已编译的代码中,ResizeArray<T>将被编译为System.Collections.Generic. List<T>,因此如果您使用C#中的库,则没有任何区别。

您不必打开System.Collections.Generic,这会隐藏F#List<T>类型的定义(虽然这不是一个大问题),我认为ResizeArray是一个无论如何,数据结构的名称更合适。

答案 1 :(得分:10)

您也需要打开System.Collections.Generic - 您引用的List<_>类型是F#的不可变列表类型(来自Microsoft.FSharp.Collections命名空间,默认情况下打开),这不是不公开公共建设者。

答案 2 :(得分:7)

List<T> class中定义System.Collections.Generic namespace,因此您需要添加:

open System.Collections.Generic
相关问题