这是一个引用类型的实例变量??

时间:2014-11-15 03:32:19

标签: c# arrays list

我真正想知道的是这段代码:

arrInt .....是一个整数和
数组 listArr() ...是整数数组的动态列表

arrInt = {1, 2}

listArr.add(arrInt)

arrInt = {3, 4}

listArr.add(arrInt)

结果:
listArr(0)= {1,2}
listArr(1)= {3,4}

虽然我确信结果会是:
listArr(0)= {3,4} listArr(1)= {3,4}

这表明 listArr 的每个元素都是一个强类型数组,它是 arrInt 的实例化副本
而不是对 arrInt 的引用,也不是对 arrInt 的引用的值, 因此,你可能认为这是一个天真的问题,〜>是作为对象副本创建的 List< T> 的所有元素吗?

2 个答案:

答案 0 :(得分:4)

  

是作为对象副本创建的List的所有元素吗?

不,他们不是。您正在创建新阵列而不是修改相同的阵列。

arrInt = {3, 4}arrInt = new [] {3, 4}的语法糖,是arrInt = new int[] {3, 4}的语法糖。你现在能看到新的阵列分配吗?

获得

listArr(0) = {3, 4}
listArr(1) = {3, 4}

您需要更改初始数组的内容:

arrInt = {1, 2};

listArr.add(arrInt);

arrInt[0] = 3;
arrInt[1] = 4;

listArr.add(arrInt);

这会在listArr[0]listArr[1]中产生相同的值。

答案 1 :(得分:0)

如果没有扩展的对话,实际上不可能确切地知道这一系列陈述的哪一部分让你感到困惑。但在我看来,这些操作的关键方面是你错了可能是这样的:当执行语句listArr.Add(arrInt);时,添加到列表中的东西是对象的引用 arrInt正在引用,而不是你想象中的变量arrInt本身。

语句完成后,列表中的元素与变量arrInt无任何关联。该变量包含一个值,该值是对数组{ 1, 2 }的引用。当您执行listArr.Add(arrInt);时,添加到列表中的内容是变量包含的,即对该数组的引用。

当您为变量arrInt分配新值时,即对完全不同的数组{ 3, 4 }的引用时,变量本身会采用该新值。但由于列表中的元素只是变量的前一个值,与变量本身无关,因此不受影响。