我对c#的大部分研究都与之前的版本有关,我对这种代码并不十分熟悉。我被提供了这个剪切的波纹管,但我很难将产品动态添加到匿名对象的items属性。
1000
这个想法将是:
var body = new
{
items = new[] {
new {
name = "Product 1",
value = 1000,
amount = 2
}
},
shippings = new[] {
new {
name = "Default Shipping Cost",
value = 100
}
}
};
答案 0 :(得分:2)
试试这样:
var body = new { items = new[]{ new { } }.ToList() };
foreach(Modelos.Produto p in carrinho.Items)
{
body.items.Add( /* ... */ );
}
但请注意,这种编码风格旨在解决一些非常具体的问题,即使用旧的COM库和LinQ查询。如果你试图超越它,你会很快发现它有很大的缺点。
其中一个缺点(我称之为功能)是你仍在使用固定类型,这意味着该集合初始值设定项中的new { }
成为通用列表的模板。
答案 1 :(得分:0)
如果你真的别无选择,而且强烈建议改用其他内容(List<T>
等),你可以使用Array.Resize()
来调整数组的大小,在其末尾添加一个新项目:
var body = new { items = new[]{ new { } } };
foreach(Modelos.Produto p in carrinho.Items)
{
var array = body.items;
Array.Resize(ref array, array.Length + 1);
body.items[body.items.Length - 1] = new {}; // or whatever you want to add here
}
答案 2 :(得分:0)
var list = new List<Test>();
for (int i = 1; i < 20; i++)
{
list.Add(new Test($"descrition {i}"));
}
var listDynamic = new List<object>();
foreach (var item in list)
{
var properties = item.GetType().GetProperties();
object expando = new ExpandoObject();
var p = expando as IDictionary<string, object>;
foreach (var property in properties)
{
var value = item.GetType().GetProperty(property.Name).GetValue(item, null);
p[property.Name] = value;
}
listDynamic.Add(p);
}
我认为这可以解决您的问题。