Ошибка fs1133: Конструкторы доступны для типа «Список» <'A>' '

StackOverflow https://stackoverflow.com/questions/9513891

  •  14-11-2019
  •  | 
  •  

Вопрос

Я создал тип человека следующим образом, который работает нормально.

type Person = 
    { First: string; Last : string }
    override this.ToString() = sprintf "%s, %s" this.First this.Last
.

Но когда я пытаюсь сделать список лиц следующим образом.

let people = 
    new List<_>( 
        [|
            {First = "Bhushan"; Last = "Shinde"} 
            { First = "Abhi"; Last = "Jad"}
        |])
.

Это дает ошибку: нет конструкторов доступны для типа «Список» <'A>' '

Может кто-нибудь, пожалуйста, объясните, в чем проблема?

Спасибо.

Это было полезно?

Решение

In F#, the name List<_> is used to refer to the immutable F# list (defined in F# core library).

If you want to create mutable .NET list (System.Collections.Generic.List<_>), you need to use an alias that is defined in the F# library ResizeArray<_> (or you need to use fully qualified name):

let people =  
    new ResizeArray<_>(  
        [| 
            {First = "Bhushan"; Last = "Shinde"}  
            { First = "Abhi"; Last = "Jad"} 
        |]) 

If you want to create a normal F# list (and use it in a functional style), then you can just use the list comprehension syntax without passing the value to any constructor:

let people =  
        [ {First = "Bhushan"; Last = "Shinde"}  
          { First = "Abhi"; Last = "Jad"} ]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top