在F#中创建通用List <T>

Grz*_*nio 10 f#

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

module Csv

open System;

type Sheet () =
  let rows = new List<Object>()
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

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

我究竟做错了什么?

Tom*_*cek 26

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

type Sheet () = 
  let rows = new ResizeArray<Object>() 
Run Code Online (Sandbox Code Playgroud)

在编译的代码中,ResizeArray<T>将编译为System.Collections.Generic. List<T>,所以如果你使用C#中的库,将没有任何区别.

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


kvb*_*kvb 11

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


sta*_*ica 8

List<T>中定义的System.Collections.Generic命名空间,所以你需要添加:

open System.Collections.Generic
Run Code Online (Sandbox Code Playgroud)