2012-08-17 34 views
9

tôi đang cố gắng để tạo ra một tiêu chuẩn NET List<T> trong F # như thế này:Tạo một danh sách chung <T> trong F #

module Csv 

open System; 

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

nhưng tôi nhận được lỗi sau:

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

Tôi đang làm gì sai rồi?

Trả lời

24

Như một sự thay thế đơn giản hơn những gì người khác đề nghị, bạn có thể sử dụng các loại tên ResizeArray<T>. Đây là một loại bí danh cho System.Collections.Generic.List<T> quy định tại F thư viện # lõi:

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

Trong mã biên dịch, ResizeArray<T> sẽ được biên dịch xuống System.Collections.Generic. List<T>, vì vậy nếu bạn sử dụng thư viện của bạn từ C#, sẽ không có bất kỳ sự khác biệt.

Bạn không phải mở System.Collections.Generic, điều này sẽ ẩn định nghĩa kiểu F # List<T> (mặc dù đây không phải là vấn đề lớn), và tôi nghĩ rằng ResizeArray là tên phù hợp hơn cho cấu trúc dữ liệu.

10

Bạn cần phải mở System.Collections.Generic, quá - loại List<_> mà bạn đang tham chiếu là loại danh sách bất biến của F # (từ không gian tên Microsoft.FSharp.Collections, được mở theo mặc định), không hiển thị các nhà thầu công khai.

Các vấn đề liên quan