当前位置: 首页 > article >正文

1.1 结构体与类对象在List中使用区别

一、问题的起源
    如下的代码是错误的,无法编译通过
struct Point
{
    public int X;
    public int Y;
}

List<Point> points = new List<Point> { new Point { X = 1, Y = 2 } };
points[0].X = 10; // 编译错误!无法修改副本的字段

二、原因分析

          在C#中,结构体(struct)是值类型,当其存储在List<T>中时,直接通过索引访问获取的是该结构体的副本,而非原始实例的引用。因此,直接修改结构体字段的值会导致编译错误,因为你在尝试修改一个临时副本,这个没有意义。

     上述代码的正确做法:

// 取出副本
Point temp = points[0];
// 修改副本
temp.X = 10;
// 将副本重新赋值回列表
points[0] = temp;

三、如果是类,下属代码就没有问题,因为list中存储的是对象的指针。可以直接修改其中的变量。

class Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

List<Point> points = new List<Point> { new Point { X = 1, Y = 2 } };

points[0].X = 10; 


http://www.kler.cn/a/596532.html

相关文章:

  • 使用flask_restful快速构建接口
  • golang压力测试工具如hey或wrk使用介绍
  • 可编辑52页PPT | 智慧园区安全生产顶层设计方案
  • [项目]基于FreeRTOS的STM32四轴飞行器: 十一.MPU6050配置与读取
  • 数据结构之双向链表-初始化链表-头插法-遍历链表-获取尾部结点-尾插法-指定位置插入-删除节点-释放链表——完整代码
  • 【Golang】go语言操作redis数据库--go-redis
  • pikachu,phpstudy启动遇到的问题,本地安装过mysql
  • 构建自定义MCP天气服务器:集成Claude for Desktop与实时天气数据
  • 智慧港口新未来:大数据赋能应急消防,筑牢安全防线
  • 置信度是什么?
  • Collectors.toList / list 转 list
  • 清晰易懂的 Python 彻底卸载与清理教程
  • Java面试高频问题深度解析:JVM、锁机制、SQL优化与并发处理
  • 《鸿蒙原生应用开发:掌控Ability生命周期的艺术》
  • AWS 日本东京 EC2 VPS 性能、线路评测
  • ESPNOW收发测试 基于esp-idf
  • 1、正点原子ZYNQ最小系统--GPIO之MIO控制LED笔记
  • HCIP交换机hybrid接口实验
  • Minine源码设计逻辑解析
  • STM32F103C8T6 -MINI核心板