关于地址引用与值引用的坑
List<UserInfo> userInfoList = new List<UserInfo>();
List<UserInfo> userInfoList_new = new List<UserInfo>(userInfoList);
userInfoList_new 与userInfoList 指的是相同的内存吗?
答:
在C#中,userInfoList_new 和 userInfoList 都是列表引用,但它们指向的是不同的内存空间。这意味着如果你添加或删除一个列表中的元素,这将不会影响另一个列表。
然而,需要注意的是,尽管这两个列表本身位于不同的内存空间,但是它们包含的 UserInfo 对象仍然指向相同的内存地址。换句话说,这两个列表共享相同的对象。所以,如果你更改了其中一个列表中的某个 UserInfo 对象的属性,那么这个变化也会反映在另一个列表中。
例如:
List<UserInfo> userInfoList = new List<UserInfo>();
userInfoList.Add(new UserInfo { Name = "Alice" });List<UserInfo> userInfoList_new = new List<UserInfo>(userInfoList);
userInfoList_new[0].Name = "Bob";
Console.WriteLine(userInfoList[0].Name); // This will output "Bob", not "Alice"
在这个例子中,我们更改了 userInfoList_new 中的第一个 UserInfo 对象的 Name 属性。因为 userInfoList 和 userInfoList_new 实际上指向同一个 UserInfo 对象,所以当我们打印出 userInfoList 中的第一个 UserInfo 对象的 Name 时,结果是 “Bob” 而不是 “Alice”。
如果你想创建 UserInfo 对象的深拷贝,那么你需要手动实现这一点,例如通过序列化和反序列化对象,或者在 UserInfo 类中实现 ICloneable 接口,并在需要的时候调用 Clone() 方法。
怎么才能实现修改userInfoList_new 中的第一个 UserInfo 对象的 Name 属性不会影响userInfoList 中的第一个 UserInfo 对象的 Name?
如果你想要在修改 userInfoList_new 中的对象时不影响 userInfoList 中的对象,你需要创建 UserInfo 对象的深拷贝。这通常可以通过实现 ICloneable 接口或者自定义一个复制方法完成。
以下是通过 ICloneable 接口实现深拷贝的示例:
public class UserInfo : ICloneable
{public string Name { get; set; }public object Clone(){return this.MemberwiseClone();}
}
然后,在创建新列表时,你需要为每个元素创建一个克隆:
List<UserInfo> userInfoList = new List<UserInfo>();
userInfoList.Add(new UserInfo { Name = "Alice" });List<UserInfo> userInfoList_new = new List<UserInfo>(userInfoList.Count);foreach(var userInfo in userInfoList)
{userInfoList_new.Add((UserInfo)userInfo.Clone());
}// Now you can modify userInfoList_new without affecting userInfoList
userInfoList_new[0].Name = "Bob";Console.WriteLine(userInfoList[0].Name); // Outputs: Alice
Console.WriteLine(userInfoList_new[0].Name); // Outputs: Bob
在这个例子中,我们首先创建了 userInfoList 并添加了一个 UserInfo 对象,然后我们创建了 userInfoList_new,并为 userInfoList 中的每个元素添加了一个克隆。之后,我们可以修改 userInfoList_new 中的对象而不会影响 userInfoList 中的对象。
相关文章:
关于地址引用与值引用的坑
List<UserInfo> userInfoList new List<UserInfo>(); List<UserInfo> userInfoList_new new List<UserInfo>(userInfoList);userInfoList_new 与userInfoList 指的是相同的内存吗? 答: 在C#中,userInfoList_new …...

初谈软件工程(一)
我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中,兰州交通大学可能并不显眼,似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而,在甘肃省的教育领域中,它无疑是一座璀璨的明珠,名列前茅…...
自动化开展思路
自动化开展思路 本人在公司一直从事自动化测试推进工作,最近在好友的邀请下去其就职的公司分享如何开展自动化测试! 希望能帮其解决如下几个痛点: 1.上线周期长; 2.测试时间紧张,上线信心不足,测试覆盖…...

安装使用zookeeper
先去官网下载zookeeper:Apache ZooKeeper 直接进入bin目录,使用powerShell打开。 输入: ./zkServer.cmd 命令,启动zookeeper。 zookeeper一般需要配合Dubbo一起使用,作为注册中心使用,可以参考另一篇博客…...

nginx实现http反向代理及负载均衡
目录 一、代理概述 1、代理概念 1.1 正向代理(Forward Proxy) 1.2 反向代理(Reverse Proxy) 1.3 正向代理与反向代理的区别 2、同构代理与异构代理 2.1 同构代理 2.2 异构代理 2.3 同构代理与异构代理的区别 二、四层代…...

vue组件中data为什么必须是一个函数
查看本专栏目录 关于作者 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#x…...

科技论文编写思路
科技论文编写思路 1.基本框架2.课题可行性评估1.研究目标和意义2.研究方法和技术3.可行性和可操作性4.风险和不确定性5.经济性和资源投入6.成果预期和评估 3.写作思路4.利用AI读论文5.实验流程 1.基本框架 IntroductionRelated worksMethodExperiment and analysisDiscussionC…...

Windows虚拟机克隆后修改SID
在日常使用VMware Workstation我们经常会去克隆一些Windows操作系统的虚拟机,克隆的虚拟机和源虚拟机的系统安全标识符(Security Identifiers,SID)相同,SID是标识用户、组和计算机账户的唯一的号码。 如果两台虚拟机都…...
前端架构: 脚手架工具rxjs的快速上手应用
rxjs rxjs 是一个异步的库和Promise是非常的相似 文档:https://www.npmjs.com/package/rxjs Weekly Downloads 44,474,389 (动态数据) 说明这个库也是非常的流行 安装 $ npm i -S rxjs 使用 import { range, filter, map } from rxjs;range(1, 200).pipe(filte…...

小程序框架(概念、工作原理、发展及应用)
引言 移动应用的普及使得用户对于轻量级、即时可用的应用程序需求越来越迫切。在这个背景下,小程序应运而生,成为一种无需下载安装、即点即用的应用形式,为用户提供了更便捷的体验。小程序的快速发展离不开强大的开发支持,而小程…...

音视频数字化(数字与模拟-电影)
针对电视屏幕,电影被称为“大荧幕”,也是娱乐行业的顶尖产业。作为一项综合艺术,从被发明至今,近200年的发展史中,无人可以替代,并始终走在时代的前列。 电影回放的原理就是“视觉残留”,也就是快速移过眼前的画面,会在人的大脑中残留短暂的时间,随着画面不断地移过,…...
在 Ubuntu 中, 使用 fsck 命令来修复磁盘文件系统
在 Ubuntu 中,可以使用 fsck 命令来修复磁盘文件系统。fsck 是用于检查和修复文件系统的工具。 使用 fsck 命令修复磁盘文件系统的步骤如下: 首先,您需要在命令行终端窗口中以 root 用户身份登录。 使用 fdisk -l 命令列出所有磁盘设备。 …...

LED电子显示屏连接方式解析
LED电子显示屏作为现代化数字展示设备的重要组成部分,其连接方式对于显示效果和稳定性至关重要。正确选择和实施连接方式不仅可以确保LED显示屏系统的正常运行,还可以提高其可靠性和持久性。本文将介绍LED电子显示屏常见的连接方式,以帮助读者…...

Mysql运维篇(五) 部署MHA--主机环境配置
一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 大佬博文 https://www.cnblogs.com/gomysql/p/3675429.html MySQL 高可用(MHA&#x…...
Offer必备算法09_分治快排_四道力扣OJ(快排三路划分)
目录 分治快排算法原理 ①力扣75. 颜色分类 解析代码 ②力扣912. 排序数组 解析代码 ③力扣215. 数组中的第K个最大元素 解析代码 ④力扣LCR 159. 库存管理 III(剑指 Offer . 最小的k个数) 解析代码 本篇完。 分治快排算法原理 分治就是分而治…...

Linux下性能分析的可视化图表工具
1 sar 和sadf 1.1 简介 sar命令可以记录系统下的常见活动信息,例如CPU使用率、网络统计数据、Block I/O数据、内存使用情况 等。 sar命令的“-o [file_name]”参数可以将系统活动数据记录到file_name文件,然后通过sadf来解析,sadf命令的“-g…...

泽攸科技JS系列高精度台阶仪在半导体领域的应用
泽攸科技JS系列高精度台阶仪是一款先进的自主研发的国产台阶仪,采用了先进的扫描探针技术。通过扫描探针在样品表面上进行微观测量,台阶仪能够准确获取表面形貌信息。其工作原理基于探针与样品表面的相互作用力,通过测量探针的微小位移&#…...

c++实现栈和队列类
c实现栈和队列类 栈(Stack)Stack示意图Stack.cpp 队列(queue)queue 示意图queue.cpp 栈(Stack) Stack示意图 Stack.cpp #pragma once #include "ListStu.cpp"template<typename T> class Stack { public: /* * void push(T& tDate)* 参数一 :…...
MySQL优化之索引下推
(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:传送门 🍹 本人24应届生一枚,技术和水平有限&am…...

【Java程序设计】【C00338】基于Springboot的银行客户管理系统(有论文)
基于Springboot的银行客户管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的银行客户管理系统,本系统有管理员、员工以及用户二种角色; 管理员:个人中心、管理员管理、客…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...