【发布时间】:2021-01-10 21:52:42
【问题描述】:
我有一个要修改的值对数组。我还需要从这个数组中添加和删除值,所以我使用了一个列表。当我尝试使用列表时,我遇到了错误。
Error CS1612 - Cannot modify the return value of 'List<(int, float)>.this[int]' because it is not a variable
所以我决定进行调查。我尝试改用数组,它......工作正常吗?以下代码仅在arr1[0].Item1 += 1; 上引发错误。
static void Main()
{
List<(int, float)> arr1 = new List<(int, float)>() { (0, 0) };
(int, float)[] arr2 = new (int, float)[1];
arr1[0].Item1 += 1; // This line
arr2[0].Item1 += 1;
}
为什么元组数组是可变的,而列表不是?这是因为数组是简单的数据块,您可以轻松修改,但列表背后有很多后端使事情变得复杂?有没有一种简单的方法来解决这个问题,还是我必须制作自己的自定义类?
【问题讨论】:
-
C# 数组的特殊之处在于,访问其中的元素会为您提供对该元素的 引用,而
List的索引器会返回一个副本 -
@UnholySheep:我会避免在这里使用术语“引用”——它已经是一个重载的术语,对值类型的“引用”最终听起来有点奇怪。我认为将数组视为变量的集合更清楚。