I have following code that populates a System.Collections.Generic.List I don't like it so I was wondering if there is a better way to do this.
let getDirectories =
Directory.GetDirectories(_baseFolder)
let languagesList = new System.Collections.Generic.List<string>()
Seq.cast getDirectories
|> Seq.map(fun dir -> (new DirectoryInfo(dir)).Name)
|> fun range -> languagesList.AddRange(range)
Have you tried:
let list = new System.Collections.Generic.List<string>(arr)
List<'T>
has a constructor that takes an IEnumerable<'T>
so it happily takes any seq<'T>
you pass to it.
In addition to Mehrdad's answer
I find it helpful to define helper modules for many standard collections and .Net types to make them more F# friendly. Here I would define the following
module BclListUtil =
let ofArray (arr: 'T array) = new System.Collections.Generic.List<'T>(arr)
let ofSeq (arr: 'T seq) = new System.Collections.Generic.List<'T>(arr)
Then you could change your original code to the following
let getDirectories =
Directory.GetDirectories(_baseFolder)
let languagesList =
getDirectiories
|> Seq.map (fun dir -> (new DirectoryInfo(dir)).Name)
|> BclListUtil.ofSeq
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With