引用数组中的值类型元素

时间:2016-08-27 22:04:06

标签: c#

我有一个值类型grid和一个数组private Node[,] grid; public struct Node { public byte occupant; public Direction toTarget; public float distance; } public enum Direction { UP, LEFT, RIGHT, DOWN }

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

如何引用元素而不是在赋值时复制它?

实施例

grid[0,0]

这样做会将node的值复制到grid。我基本上想在指定点指向unsafe数组,因此我可以直接修改Node。我无法使用grid[0,0].occupant = 1;

是否有一些语法糖或我必须直接修改?例如:

@Ticket

2 个答案:

答案 0 :(得分:3)

在C#7中将有语法。现在,唯一的方法是通过ref传递元素。

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

    }

}

此代码段打印1,这是方法Do中设置的值。这表明该方法已接收对Node对象的引用,而不是复制的值。

答案 1 :(得分:1)

void DoStuff( ref Node n)
{
    n.occupant = 1;
}
...
DoStuff( ref grid[0,0);