I am trying to create a standard .NET List<T>
in F# like this:
module Csv
open System;
type Sheet () =
let rows = new List<Object>()
but I get the following error:
No constructors are available for the type
List<Object>
C:\…\Csv.fs
: 6
What am I doing wrong?
You need to open System.Collections.Generic
, too - the List<_>
type you're referencing is F#'s immutable list type (from the Microsoft.FSharp.Collections
namespace, which is opened by default), which doesn't expose public constructors.
As a simpler alternative to what others suggest, you can use the type named ResizeArray<T>
. This is a type alias for System.Collections.Generic.List<T>
defined in the F# core libraries:
type Sheet () =
let rows = new ResizeArray<Object>()
In the compiled code, ResizeArray<T>
will be compiled down to System.Collections.Generic. List<T>
, so if you use your library from C#, there will not be any difference.
You do not have to open System.Collections.Generic
, which would hide the definition of the F# List<T>
type (though this is not a big problem), and I think that ResizeArray
is a more appropriate name for the data structure anyway.
The List<T>
class is defined in the System.Collections.Generic
namespace, so you need to add:
open System.Collections.Generic
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