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.

5

8 Answers

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);
3

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.

2

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();
}
4

For people still looking

 Object[] obj = { new { key = "key", value = "value"}, new { key = "key", value = "value"}, new { key = "key", value = "value"}, new { key = "key", value = "value"} };
2

I guess GameObject is a reference type. Default for reference types is null => you have an array of nulls.

You need to initialize each member of the array separatedly.

houses[0] = new GameObject(..);

Only then can you access the object without compilation errors.

So you can explicitly initalize the array:

for (int i = 0; i < houses.Length; i++)
{ houses[i] = new GameObject();
}

or you can change GameObject to value type.

1

The reason this is happening is because initializing an array does not initialize each element in that array. You need to first set houses[0] = new GameObject() and then it will work.

1

you need to initialize the object elements of the array.

GameObject[] houses = new GameObject[200];
for (int i=0;`i<house` i<houses.length; i++)
{ houses[i] = new GameObject();}

Of course you initialize elements selectively using different constructors anywhere else before you reference them.

Everything you have looks fine.

The only thing I can think of (without seeing the error message, which you should have provided), is that GameObject needs a default (no parameter) constructor.

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like