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) ]
)