Dysfunctional Example:
public struct MyStruct { public int i, j; }
static readonly MyStruct [] myTable = new MyStruct [3]
{
{0, 0}, {1, 1}, {2, 2}
}
I know that this code doesn't work. Now how do I write this down please (proper syntax)?
The thought behind this is the following. Afaik the elements of arrays of struct are value types, so myTable points to a memory location containing three MyStruct objects (and not to a memory location containing three (uninitialized) pointers to MyStruct objects).
So how do I go about initializing those MyStruct objects, what would be the right syntax? I don't have to allocate them anymore, right?
The problem you are facing has nothing to do with using a struct as the array type. Your syntax would also be invalid if you would use a class.
This works:
MyStruct [] myTable = new MyStruct []
{
new MyStruct { i = 0, j = 0 },
new MyStruct { i = 1, j = 1 },
new MyStruct { i = 2, j = 2 }
};
You have to use collection initializers together with object initializers.
As collection initializers and object initializers are just syntactic sugar, this is equivalent to
MyStruct [] myTable = new MyStruct[3];
var tmp = new MyStruct();
tmp.i = 0;
tmp.j = 0;
myTable[0] = tmp;
// and so on...
What you really want with an array of structs is this:
MyStruct [] myTable = new MyStruct[3];
myTable[0].i = 0;
myTable[0].j = 0;
// and so on...
But this can't be achieved using the short hand initializer syntax.
You need to use actual instances of your MyStruct, which you can create with the new keyword.
This should work...
struct MyStruct
{
int i, j;
public MyStruct(int a, int b)
{
i = a;
j = b;
}
}
static MyStruct[] myTable = new MyStruct[3]
{
new MyStruct(0, 0),
new MyStruct(1, 1),
new MyStruct(2, 2)
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With