1

I want to add all values from myArr to myObj.

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

At the end of the foreach loop, I would like to have an object like this:

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

But every iteration I overwrite the value from the previous iteration, so at the end, I have something like this:

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

What do I need to change?

Yong Shun
  • 35,286
  • 4
  • 24
  • 46
MTS
  • 104
  • 7

1 Answers1

2

For every iteration of the loop, myObj.Ints is re-set with a new array value.

Instead, you have to add each object to the array via index.

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


Another way to do is with adding the object into List via System.Linq. Then assign the list to 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

Yong Shun
  • 35,286
  • 4
  • 24
  • 46