11

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

module Csv

open System;

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

但我收到以下错误:

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

我究竟做错了什么?

4

3 回答 3

29

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

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

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

您不必 open System.Collections.Generic,这将隐藏 F#List<T>类型的定义(尽管这不是一个大问题),而且我认为ResizeArray无论如何这对于数据结构来说是一个更合适的名称。

于 2012-08-17T17:47:07.653 回答
11

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

于 2012-08-17T17:28:07.677 回答
9

该类是在命名空间中定义的List<T>因此您需要添加:System.Collections.Generic

open System.Collections.Generic
于 2012-08-17T17:28:23.450 回答