2012-08-17 64 views
9

我想在F#像这样来创建一个标准的.NET List<T>F#中创建一个泛型列表<T>

module Csv 

open System; 

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

,但我得到了以下错误:

No constructors are available for the type List<Object>
C:\…\Csv.fs : 6

我在做什么错误?

回答

24

至于别人提出一个简单的替代,你可以使用一个名为ResizeArray<T>类型。这是System.Collections.Generic.List<T>一个类型别名在F#核心库定义:

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

在编译的代码,ResizeArray<T>会被编译成System.Collections.Generic. List<T>,因此,如果您使用的库从C#,不会有任何区别。

您不必打开System.Collections.Generic,这将隐藏F#List<T>类型的定义(虽然这不是什么大问题),我认为这ResizeArray是数据结构的更合适的名称反正。

10

您需要打开System.Collections.Generic,太 - 你引用List<_>类型是F#的不可变列表类型(从Microsoft.FSharp.Collections命名空间,这是默认开启),它不公开公共构造函数。