2010-06-23 8 views

Répondre

38

Essayez List.ofSeq dans l'espace de noms Microsoft.FSharp.Collections.

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

Ce n'est pas spécifiquement pour System.Collections.Generic.List<T>, mais pour IEnumerable<T> (seq<'T> en F #) types en général, il devrait encore fonctionner.

(Il est également pas strictement construit dans la langue F #, mais elle ne est List<T> construit en C# ou VB.NET. Ce sont tous partie des bibliothèques standard respectives.)

+0

J'ai également remarqué avec l'inférence de type compilateur 2.0 la liste sur le côté droit apparaît comme un seq (ou IEnumerable) sur le côté gauche. Assez intelligent de ces gars-là (+1) – BuddyJoe

7

Étant donné que vous IEnumerable<T> foo souhaitez effectuer les opérations suivantes (en C#) pour obtenir un F # list<T>:

var fsharpList = ListModule.OfSeq(foo); 

ListModule fait référence à Microsoft.FSharp.Collections.ListModule, et est appelé List à partir de F # lui-même.

+0

Il n'y a rien de tel que ListModule dans F # – Joel

+2

Ce n'est pas spécifié si la question portait sur C# ou F #. Ce code est en C#. Il y a un 'ListModule' dans F #. C'est juste appelé 'list' dans F #, donc' list.ofSeq' dans F # == 'ListModule.OfSeq' en C#. – basarat