2012-08-17 8 views
9

Ich versuche, einen Standard .NET List<T> in F # wie diese zu erstellen:Erstellen eine generische Liste <T> in F #

module Csv 

open System; 

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

aber ich folgende Fehlermeldung erhalten:

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

Was soll ich tun falsch?

Antwort

24

Als einfachere Alternative, was andere vorschlagen, können Sie den Typ ResizeArray<T> namens verwenden. Dies ist eine Art Alias ​​für System.Collections.Generic.List<T> in den # Kernbibliotheken F definiert:

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

Im Code kompiliert wird ResizeArray<T> bis System.Collections.Generic. List<T> kompiliert werden, so dass, wenn Sie Ihre Bibliothek von C# verwenden, gibt es kein Unterschied sein.

Sie müssen System.Collections.Generic nicht öffnen, was die Definition des F # List<T> Typ verstecken würde (obwohl dies kein großes Problem ist), und ich denke, dass ResizeArray ist ein passender Name für die Datenstruktur sowieso.

10

Sie müssen System.Collections.Generic öffnen, auch - die List<_> Typ Sie Referenzierung F # 's unveränderliche Liste Typ (vom Microsoft.FSharp.Collections Namespace, die standardmäßig geöffnet wird), die nicht öffentlich Konstrukteurs aussetzt.

Verwandte Themen