簡體   English   中英

如何在C#中將對象添加到匿名對象的數組屬性中

[英]How do I add object to an array property of an anonymous object in c#

我對C#的大部分研究工作都是在早期版本中進行的,我對這種代碼不是很熟悉。 我被提供了這個簡短的消息,但是我很難將產品動態添加到匿名對象的items屬性中。

  var body = new
     {
        items = new[] {
         new {
            name = "Product 1",
            value = 1000,
            amount = 2
             }

           },
        shippings = new[] {
           new {
            name = "Default Shipping Cost",
            value = 100
               }
             }
      };

這個想法是:

 var body = new { items =  new[]{ new { }  } };

        foreach(Modelos.Produto p in carrinho.Items)
        {
            body.items // add elements  { name = p.name }
        }

像這樣嘗試:

var body = new { items =  new[]{ new { }  }.ToList() };

foreach(Modelos.Produto p in carrinho.Items)
{
    body.items.Add( /* ... */ );
}

但是請注意,這種編碼方式旨在解決一些非常具體的問題,即使用舊的COM庫和內部LinQ查詢。 如果您嘗試超越此范圍,您將很快發現它具有明顯的缺點。

這些缺點之一(我稱其為功能)是您仍在使用固定類型,這意味着該集合初始值設定項中的new { }成為了通用列表的模板。

如果您真的別無選擇,並且強烈建議使用其他方法(例如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
}
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);
        }

我認為這可以解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM