2010-06-23 3 views

risposta

38

Provare List.ofSeq nello spazio dei nomi Microsoft.FSharp.Collections.

#      List.ofSeq : seq<'T> -> 'T list 

Non è specifico per System.Collections.Generic.List<T>, ma per IEnumerable<T> (seq<'T> in F #) tipi in generale, quindi dovrebbe ancora funzionare.

(E 'anche non strettamente integrato nel linguaggio F #, ma non è List<T> costruito in C# o VB.NET. Questi sono tutti parte delle rispettive librerie standard.)

+0

Ho anche notato con l'inferenza del tipo di compilatore 2.0 l'elenco sul lato destro si presenta come seq (o IEnumerable) sul lato sinistro. Abbastanza intelligente di questi ragazzi (+1) – BuddyJoe

7

Dato IEnumerable<T> foo si dovrebbe effettuare le seguenti operazioni (in C#) per ottenere un F # list<T>:

var fsharpList = ListModule.OfSeq(foo); 

ListModule riferisce a Microsoft.FSharp.Collections.ListModule, e si riferisce a come List da F # stessa.

+0

Non c'è niente come ListModule in F # – Joel

+2

Non specificato se la domanda riguardava C# o F #. Questo codice è in C#. C'è un 'ListModule' in F #. Si chiama semplicemente 'list' in F #, quindi' list.ofSeq' in F # == 'ListModule.OfSeq' in C#. – basarat