2016-08-27 3 views
0

で値型の要素Iが値型Nodeと配列を持っているgridリファレンス配列

private Node[,] grid; 

public struct Node { 
    public byte occupant; 
    public Direction toTarget; 
    public float distance; 
} 

public enum Direction { 
    UP, LEFT, RIGHT, DOWN 
} 

がどのように割り当てにそれをコピーするのではなく、要素を参照するのですか? nodeにこのコピーをgrid[0,0]の値を行う

Node node = grid[0,0]; 
node.occupant = 1; 

。私は基本的にノードを直接変更できるように指定されたポイントにgrid配列へのポインタを入れたいと思っています。 unsafeを使用できません。

シンタックスシュガーがありますか、それとも直接修正する必要がありますか?例:今のC#7にそのための構文があります

grid[0,0].occupant = 1; 
+1

なぜ 'struct'の代わりに' class'を使用しないのですか? –

+0

違いがありますか? –

+0

c#でコピーしません。参照(ポインタ)です。 – jdweng

答えて

3

、それを行うための唯一の方法は、参考文献によって要素を渡すことになります。

class Program 
{ 

    static void Do(ref Node node) 
    { 
     node.occupant = 1; 
    } 

    static void Main() 
    { 
     Node[] nodes = new Node[10]; 
     nodes[5].occupant = 2; 

     Do(ref nodes[5]); 
     Console.WriteLine(nodes[5].occupant); 

     Console.ReadLine(); 

    } 

} 

このコードセグメントは、メソッドDoで設定された値1を出力します。これは、メソッドがコピーされた値ではなく、Nodeオブジェクトへの参照を受け取ったことを示します。

1
void DoStuff(ref Node n) 
{ 
    n.occupant = 1; 
} 
... 
DoStuff(ref grid[0,0); 
関連する問題