开发者

How to initialize array of struct?

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 memor开发者_开发技巧y 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)
};
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜