我有一个值类型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
答案 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);