C#中修改List<int>或数组指定索引元素的正确方法是什么
问题解答
先说结论:a[2]++ 是符合需求的正确写法,a[2] = a[2]++ 无法完成索引2位置元素的修改操作。
前提说明
C# 中无论是int数组还是List<int>的索引器,访问int值类型元素的读写逻辑在该场景下表现完全一致,不需要区分集合类型讨论。
两种写法的核心差异
1. a[2]++ 执行逻辑
后置自增运算符在该场景下的执行顺序为:
- 读取索引2位置的当前值(初始为3)
- 计算得到加1后的结果4
- 直接将4回写到索引2的存储位置
执行完成后索引2位置的值为4,完全符合修改需求。
2. a[2] = a[2]++ 执行逻辑
该写法的错误根源在于后置自增的返回值规则和赋值操作的执行顺序:
- 首先读取等号右侧
a[2]的原始值3 - 对右侧的
a[2]执行自增,将4写入索引2的位置 - 后置自增运算符的返回值为自增前的原始值3,而非自增后的4
- 最后将返回的3赋值给等号左侧的
a[2],直接覆盖了刚刚写入的4
最终执行完成后索引2位置的值仍然是3,没有实现修改效果。
效果验证代码
可以直接运行以下代码确认两种写法的区别:
// 数组测试 int[] arr = new int[] {1,2,3,4,5}; arr[2] = arr[2]++; Console.WriteLine(arr[2]); // 输出3 arr[2]++; Console.WriteLine(arr[2]); // 输出4 // List<int>测试效果完全一致 List<int> list = new List<int> {1,2,3,4,5}; list[2] = list[2]++; Console.WriteLine(list[2]); // 输出3 list[2]++; Console.WriteLine(list[2]); // 输出4
内容的提问来源于stack exchange,提问作者Shubham Tyagi
相关产品推荐
相关产品推荐

