Ошибка FS1133: нет доступных конструкторов для типа 'Список <' a> ' - PullRequest
1 голос
/ 01 марта 2012

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

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

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

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

Выдает ошибку: Нет доступных конструкторов для типа 'Список <' a> '

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

Спасибо.

1 Ответ

8 голосов
/ 01 марта 2012

В F # имя List<_> используется для ссылки на неизменный список F # (определенный в базовой библиотеке F #).

Если вы хотите создать изменяемый список .NET (System.Collections.Generic.List<_>), вам нужно использовать псевдоним, определенный в библиотеке F # ResizeArray<_> (или вам нужно использовать полное имя):

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

Если вы хотите создать обычный список F # (и использовать его в функциональном стиле), то вы можете просто использовать синтаксис понимания списка, не передавая значение любому конструктору:

let people =  
        [ {First = "Bhushan"; Last = "Shinde"}  
          { First = "Abhi"; Last = "Jad"} ]
...