2016-08-27 2 views
0

에 값 형식 요소 나 값 형식 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을 사용할 수 없습니다.

구문 설탕이 있습니까? 아니면 직접 수정해야합니까? 예 :

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

왜'struct' 대신'class'를 사용하지 않습니까? –

+0

차이가 있습니까? –

+0

C#에서 복사하지 않습니다. 참조 (포인터)입니다. – jdweng

답변

3

현재 C#을 7에서 그 구문이있을 것이다, 그렇게 할 수있는 유일한 방법은 심판에 의해 요소를 통과하는 것입니다.

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