向 ExpandoObject 添加新的 [] 值

Add new [] values to ExpandoObject

我想将 myArrmyObj 的所有值相加。

int[,] myArr = {
    {1, 2},
    {3, 4}
};

dynamic myObj = new ExpandoObject();

foreach(var myInt in myArr)
{
    myObj.Ints = new[]
    {
        new
        {
            value = myInt,
            value_plus_1 = myInt + 1
        }
    };
}

在 foreach 循环结束时,我想要一个这样的对象:

Ints: [
  {
    value: 1,
    value_plus_1: 2
  },
  {
    value: 2,
    value_plus_1: 3
  },
  {
    value: 3,
    value_plus_1: 4
  },
  {
    value: 4,
    value_plus_1: 5
  }
]

但是每次迭代我都会覆盖上一次迭代的值,所以最后,我有这样的东西:

Ints: [
{
  {
    value: 4,
    value_plus_1: 5
  }
]

我需要更改什么?

对于循环的每次迭代,myObj.Ints 都会重新设置一个新的数组值。

相反,您必须通过索引将每个对象添加到数组中。

dynamic myObj = new ExpandoObject();
myObj.Ints = new dynamic[myArr.Length];
        
int index = 0;
foreach(var myInt in myArr)
{
    myObj.Ints[index] = 
        new
        {
            value = myInt,
            value_plus_1 = myInt + 1
        };
                       
    index++;
}

Sample program


另一种方法是通过 System.Linq 将对象添加到 List。然后将列表赋值给myObj.Ints.

using System.Linq;

dynamic myObj = new ExpandoObject();
var list = new List<dynamic>();
        
foreach(var myInt in myArr)
{
    list.Add( 
        new
        {
            value = myInt,
            value_plus_1 = myInt + 1
        }
    );
}
        
myObj.Ints = list;

Sample program 2