如何在c#中将对象添加到匿名对象的数组属性

时间:2018-04-30 16:56:31

标签: c# anonymous-types c#-6.0

我对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
               }
             }
      };

3 个答案:

答案 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);
        }

我认为这可以解决您的问题。