ResizeArray Instance в свойстве

Я пытаюсь преобразовать код C# в F#

Items = new List<Item>
{
    new Item
    {
        Product = "",
        Category = "",
        Quantity = 1,
        Detail = "",
        Price = 220
    }
}

Следуйте коду F#:

let items = ResizeArray<Item>()
items.Add(Item(
            Product = "", 
            Category = "", 
            Quantity = 1, 
            Detail = "", 
            Price = 220))
let body = 
    OrderRequest(
        Items = items)

Как я могу создать экземпляр непосредственно в Items имущество? Без создания новой переменной, а затем сделать Add(), Равен первый код C#.

Я пробовал это таким образом, и это не работает:

let body = 
    OrderRequest(
        Items = ResizeArray<Item>(Item(
                                    Product = "", 
                                    Category = "",
                                    Quantity = 1,
                                    Detail = "",
                                    Price = 220)))

Я получаю ошибку:

Error FS0193 Possible overhead: 'Generic.List (collection:
Generic.IEnumerable <Item>): ResizeArray <Item>'. 
Incompatible type restrictions. The 'Item' 
type is not compatible with
type 'Generic.IEnumerable <Item>'

2 ответа

Если OrderRequest конструктор принимает IEnumerable<T>, вы можете сделать то, что предлагает @VasilyKirichenko. В противном случае, если ResizeArray на самом деле требуется, я предлагаю следующее, что вполне читабельно:

let body =
    seq { Item (Product = "",
                Category = "",
                Quantity = 1,
                Detail = "",
                Price = 220) }
    |> fun li -> ResizeArray<_> li
    |> fun ra -> OrderRequest (Items = ra)

Если Items имеет тип IEnumerable<Item> (ака Seq<Item>), тогда вы можете написать:

let body = 
    OrderRequest(
        Items =
            [ Item(
                Product = "", 
                Category = "", 
                Quantity = 1, 
                Detail = "", 
                Price = 220) ]
   )
Другие вопросы по тегам