user2261524
user2261524

Reputation: 415

C#: Object Array with Constructor parameter

I have a class Measurement.

I have a constructor inside this class. as:

class Measurement
    {
      public Measurement(MainWindow mainWindow)
        {
            ....
        }
}

How can I create an Array of 8 Objects with the MainWindow Parameter?

Like somewhere in my code:

Measurement[] measurements= new Measurement[8](mainWin); 

Upvotes: 1

Views: 2669

Answers (4)

Jon Skeet
Jon Skeet

Reputation: 1504162

Do you want an array with a single reference 8 times, or 8 separate Measurement objects?

For the first:

var measurements = Enumerable.Repeat(new Measurement(mainWin), 8).ToArray();

For the second:

var measurements = Enumerable.Range(0, 8)
                             .Select(_ => new Measurement(mainWin))
                             .ToArray();

(Or just create an array without initializing the elements, then populate it with a loop, of course. It's a matter of personal preference.)

Upvotes: 15

Jonas W
Jonas W

Reputation: 3260

There is this way (by using Enumerable.Repeat) :

var measurements = Enumerable.Repeat(new Measurement(mainWin), 8).ToArray(); 

Quote :

Generates a sequence that contains one repeated value.

Upvotes: 3

Sander
Sander

Reputation: 402

Measurement[] measurements= new Measurement[8];

for(int i = 0; i < measurements.Length; i++)
{
   measurements[i] = new Measurement(mainWin);
}

Upvotes: 2

Brandon
Brandon

Reputation: 39222

You can use LINQ:

var measurements = Enumerable.Range(0, 8).Select(i => new Measurement(mainWin)).ToArray();

A second way is to use the array initializer syntax:

var measurements = new[] {
    new Measurements(mainWin), new Measurements(mainWin), 
    new Measurements(mainWin), new Measurements(mainWin), 
    new Measurements(mainWin), new Measurements(mainWin), 
    new Measurements(mainWin), new Measurements(mainWin)
};

Upvotes: 14

Related Questions