How to declare an array of objects in C#
I have a very beginning C# question. Suppose I have a class called GameObject
, and I want to create an array of GameObject
entities. I could think of writing code like:
GameObject[] houses = new GameObject[200];
The compiler complains (assuming because of invalid syntax). Since this is XNA development, I load my texture in the LoadContent()
method as follows:
houses[0].Model = Content.Load<Model>("Models\\Building_01 Windowed");
where houses[0]
should be a GameObject
and can be loaded like this, but the compiler throws this error:
"Use the "new" keyword to create an object instance"
"Check to determine if the object is null before calling the method"
There must be something wrong with my initialization.
Solution 1:
The issue here is that you've initialized your array, but not its elements; they are all null. So if you try to reference houses[0]
, it will be null
.
Here's a great little helper method you could write for yourself:
T[] InitializeArray<T>(int length) where T : new()
{
T[] array = new T[length];
for (int i = 0; i < length; ++i)
{
array[i] = new T();
}
return array;
}
Then you could initialize your houses
array as:
GameObject[] houses = InitializeArray<GameObject>(200);
Solution 2:
With LINQ, you can transform the array of uninitialized elements into the new collection of created objects with one line of code.
var houses = new GameObject[200].Select(h => new GameObject()).ToArray();
Actually, you can use any other source for this, even generated sequence of integers:
var houses = Enumerable.Repeat(0, 200).Select(h => new GameObject()).ToArray();
However, the first case seems to me more readable, although the type of original sequence is not important.
Solution 3:
You are creating an array of null references. You should do something like:
for (int i = 0; i < houses.Count; i++)
{
houses[i] = new GameObject();
}