ResizeArray Instance в свойстве - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь преобразовать код 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 ]

0 голосов
/ 21 января 2019

Если конструктор 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)
0 голосов
/ 21 января 2019

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

let body = 
    OrderRequest(
        Items =
            [ Item(
                Product = "", 
                Category = "", 
                Quantity = 1, 
                Detail = "", 
                Price = 220) ]
   )
...