Accedere ad una lista F # dall’interno del codice C #

Ho scritto un modulo F # che ha una lista all’interno:

module MyModule type X = { valuex : float32 } let l = [ for i in 1 .. 10 -> {valuex = 3.3f}] 

Ora da una class C # sto provando ad accedere all’elenco precedentemente definito, ma non so come convertirlo:

 ... list = MyModule.l ; //here's my problem 

Avrei bisogno di qualcosa come:

 IList list = MyModule.l; 

Come posso ottenerlo?

Semplice come:

 IList list = MyModule.l.ToList(); 

Il motivo per cui è necessario il metodo di conversione piuttosto che una conversione cast / implicita è perché un FSharpList implementa IEnumerable ma non IList poiché rappresenta una lista concatenata immutabile.

Nota che dovrai includere FSharp.Core come riferimento nel tuo progetto C #.

La FSharpList (che è il nome .Net list F # di tipo list ) non implementa IList , perché non ha senso.

IList serve per accedere e modificare le raccolte a cui è ansible accedere per indice, che la list non è. Per usarlo da C #, puoi usare il tipo in modo esplicito:

 FSharpList l = MyModule.l; var l = MyModule.l; // the same as above 

Oppure puoi usare il fatto che implementa IEnumerable :

 IEnumerable l = MyModule.l; 

Oppure, se hai bisogno di IList , puoi usare LINQ’s ToList() , come suggerito da Ani:

 IList l = MyModule.l.ToList(); 

Ma devi ricordare che l’elenco di F # è immutabile e quindi non c’è modo di modificarlo.