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