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

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

相关文章:

  • iOS:重新定义移动交互,引领智能生活新潮流
  • vue3与springboot交互-前后分离【验证element-ui输入的内容】
  • Axure设计数字乡村可视化大屏:从布局到交互的实战经验分享
  • 解决leetcode第3539题.魔法序列的数组乘积之和
  • 通过子接口(Sub-Interface)实现三层接口与二层 VLAN 接口的通信
  • PKDV5351高压差分探头在充电桩安全测试中的应用
  • GraphQL 接口设计
  • Linux架构篇、第五章_06Jenkins 触发器全面解析与实战指南
  • 机器学习教程简介:从基础概念到实践应用的全面指南
  • DeepSeek 赋能数字孪生:重构虚实共生的智能未来图景
  • 「数智化聚合分销生态系统」定制开发:重构全渠道增长引擎
  • TS01S:单通道差分灵敏度校准电容触摸传感器芯片
  • 《告别低效签约!智合同如何用AI重构商业“契约时代”》​​——解析智能合约技术的爆发与行业变革
  • OpenHarmony外设驱动使用 (五),Fingerprint_auth
  • 【神经网络与深度学习】GAN 生成对抗训练模型在实际训练中很容易判别器收敛,生成器发散
  • 教学网站1:《软件工程》精品课程教学网站的设计与实现(摘要和目录)
  • 【Arm】应用ArmDS移植最小FreeRTOS系统
  • 嵌入式系统:技术演进、应用领域发展趋势全面解析
  • MySQL 8.0 OCP 英文题库解析(五)
  • Swift 二分查找实战:精准定位第一个“Bug版本”(LeetCode 278)
  • 山西晋城一网红徒步野游线路据传发生驴友坠崖,当地已宣布封路
  • 陈龙带你观察上海生物多样性,纪录片《我的城市邻居》明播出
  • 南京艺术学院博导、雕塑家尹悟铭病逝,年仅45岁
  • 陈刚:推动良好政治生态和美好自然生态共生共优相得益彰
  • 上海交大曾小勤:科技传播不应停留于知识搬运,要做科学思维的播种机
  • 精品消费“精”在哪?多在体验上下功夫