我正在尝试在F#中创建一个标准的.NET List<T>
,如下所示:
module Csv
open System;
type Sheet () =
let rows = new List<Object>()
但是我收到以下错误:
List<Object>
类型没有可用的构造函数C:\…\Csv.fs
:6
我做错了什么?
答案 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