C# 获取对变量的引用并避免不必要地复制它
假设我有一个这样的类:C# 获取对变量的引用并避免不必要地复制它,c#,reference,C#,Reference,假设我有一个这样的类: class Array{ int[] values; } 现在假设我有一个类,它存储了大量的Arrays: class ArrayOfArrays{ Array[] arrays; } 假设,出于某种原因,我想得到数组中最后一个数组,并放入一个变量(为了更好的可读性)。在C语言中,我想要Array last=&ArrayOfArraysObject.arrays[lastIndex]。因为我不会修改它,为了获得更好的性能,我不需要复制整个数组,只需要一
class Array{
int[] values;
}
现在假设我有一个类,它存储了大量的Array
s:
class ArrayOfArrays{
Array[] arrays;
}
假设,出于某种原因,我想得到数组
中最后一个数组
,并放入一个变量(为了更好的可读性)。在C语言中,我想要Array last=&ArrayOfArraysObject.arrays[lastIndex]
。因为我不会修改它,为了获得更好的性能,我不需要复制整个数组,只需要一个引用就可以了
我可以在C#中有这种行为吗?(在不使用函数调用的情况下,我不想仅仅为了使用关键字
ref
,而创建一个函数,这看起来有点过分了)您可以创建一个public
属性,返回数组的最后一个元素
class ArrayOfArrays
{
Array[] arrays;
public Array LastOfArrays { get { return arrays.Last(); } }
}
测试它:
现在,aoa.array[LastElement]。值[0]
也将是333
。因此,基本上在这里保留引用,而不是复制整个数组
确认:
您可以创建一个public
属性,该属性返回数组的最后一个元素
class ArrayOfArrays
{
Array[] arrays;
public Array LastOfArrays { get { return arrays.Last(); } }
}
测试它:
现在,aoa.array[LastElement]。值[0]
也将是333
。因此,基本上在这里保留引用,而不是复制整个数组
确认:
数组已使用C#中的引用。你不必做任何特别的事情,你就能得到你想要的行为:
int[][] foo = new int[][] { new int[] {1,2,3}, new int[]{4,5,6}, new int[]{7,8,9} };
var bar = foo[2];
foo[2][2] = 0; // make a change **after** assigning to bar
Console.WriteLine(bar[2]); // outputs "0" -- bar knows about the change
bar[1] = 6; // same thing, but in reverse
Console.WriteLine(foo[2][1]); // outputs "6" -- foo knows about the change
在上面的示例中,foo[2]
和bar
是对内存中相同数组的引用bar不仅仅是一个副本。数组已经在C#中使用了引用。你不必做任何特别的事情,你就能得到你想要的行为:
int[][] foo = new int[][] { new int[] {1,2,3}, new int[]{4,5,6}, new int[]{7,8,9} };
var bar = foo[2];
foo[2][2] = 0; // make a change **after** assigning to bar
Console.WriteLine(bar[2]); // outputs "0" -- bar knows about the change
bar[1] = 6; // same thing, but in reverse
Console.WriteLine(foo[2][1]); // outputs "6" -- foo knows about the change
在上面的示例中,foo[2]
和bar
是对内存中相同数组的引用bar
不仅仅是一个副本。返回最后一个元素的属性如何?这与直接访问ArrayOfArraysObject.arrays[lastIndex]
没有太大区别。为了可读性(并保持效率),如果可能的话,我更愿意创建一个类似于引用变量的东西。它确实保留了引用。对于C语言中那些生锈的,如果你做了Array last=&ArrayOfArraysObject.arrays[lastIndex]
,那么下一行将替换外部数组[]中的最后一个条目
使用新数组时,对象最后一次
引用是否会更改?在C中,在我的情况下,这无关紧要。我不会修改数组,只想用一个可以理解的名称访问它,而不必复制整个数组。返回最后一个元素的属性如何?这与直接访问ArrayOfArraysObject.arrays[lastIndex]
没有多大区别。为了可读性(并保持效率),如果可能的话,我更愿意创建一个类似于引用变量的东西。它确实保留了引用。对于C语言中那些生锈的,如果你做了Array last=&ArrayOfArraysObject.arrays[lastIndex]
,那么下一行将替换外部数组[]中的最后一个条目
使用新数组时,对象最后一次
引用是否会更改?在C中,在我的情况下,这无关紧要。我不会修改数组,只是想用一个可以理解的名称访问它,而不必复制整个数组。如果不是array[]arrays
,而是List array
,这会有什么不同吗?只有当列表中的项目数发生变化时,才需要知道哪一个是最后一个。在我的示例中,条
引用仍然有效,但它将继续引用相同的数组,即使该数组不再是最后一个数组。如果不是数组[]数组
,而是列表数组
,则会有所不同吗?只有当列表中的项目数发生变化时,才需要知道哪一个是最后一个。在我的示例中,bar
引用仍然有效,但它将继续引用相同的数组,即使该数组不再是最后一个数组。