C# List.find() 方法返回对象引用的解析与示例
"C# List<T> 的 Find() 方法返回值为对象的引用,而非复制" 在C#编程中,当我们使用List<T>容器并需要查找符合特定条件的对象时,通常会使用Find()方法。该方法根据提供的委托(或称为lambda表达式)来搜索列表中的元素。然而,一个重要的细节是,当T是一个对象类型时,Find()方法返回的是列表中匹配对象的引用,而不是该对象的一个副本。这意味着,如果你修改返回对象的属性,原始列表中的对应对象也会被修改,因为它们指向同一块内存。 以下是一个详细的示例来说明这个问题: 首先,我们定义了一个名为Class1的类,它包含两个属性:name(字符串类型)和score(整数类型)。 ```csharp public class Class1 { public string Name { get; set; } public int Score { get; set; } } ``` 接着,我们创建一个窗体应用程序,并在button1_Click事件中编写代码。在这个例子中,我们创建了一个List<Class1>类型的列表,然后添加了两个Class1对象,分别代表“小明”和“小红”。 ```csharp public Form1() { InitializeComponent(); } Class1 a = new Class1(); Class1 b = new Class1(); List<Class1> l = new List<Class1>(); private void Form1_Load(object sender, EventArgs e) { a.Name = "小明"; a.Score = 90; l.Add(a); b.Name = "小红"; b.Score = 99; l.Add(b); } ``` 在button1_Click事件中,我们使用Find()方法找到名字为“小明”的对象,并将其赋值给变量c。然后,我们修改了c的Score属性,将其设置为100。 ```csharp private void button1_Click(object sender, EventArgs e) { string name = "小明"; Class1 c = l.Find(delegate(Class1 p) { return (p.Name.Equals(name)); }); c.Score = 100; } ``` 此时,当我们运行程序并触发button1_Click事件后,会发现尽管我们只改变了变量c的Score属性,但原始列表l中的对象a的Score属性也被同步修改为100。这是因为Find()方法返回的是对象a的引用,而不是一个新的对象。 这展示了C#中对象引用的工作原理。在处理对象时,必须谨慎操作,尤其是当你从集合中取出一个对象并修改它时,可能会意外地影响到集合中的其他元素。为了避免这种问题,你可以选择创建对象的副本,或者使用Clone方法(如果对象支持)来确保操作不会影响原始数据。 对于其他可能感兴趣的相关知识,这里列出了一些C#中关于参数传递、多线程通信、页面间传值以及数据库操作的实用技巧: 1. C#实现向多线程传参的三种方式实例分析:了解如何在多线程环境中安全地传递数据。 2. C#实现.net页面之间传值传参方法汇总:学习在Web或WinForms应用中在不同页面间传递数据的多种方法。 3. C#调用存储过程详解(带返回值、参数输入输出等):掌握如何在C#中调用SQL Server的存储过程,处理返回值和参数。 4. C#调用Rar文件及获取Rar返回值的方法:了解如何通过编程解压RAR文件并处理返回结果。 5. C#中ExecuteNonQuery()返回值注意点分析:理解ExecuteNonQuery方法在执行数据库操作时返回值的意义。 6. C#获取存储过程返回值示例分享:实例教程,展示如何获取存储过程的返回值。 7. C#获取存储过程返回值和输出参数值的方法:学习如何同时获取存储过程的返回值和输出参数。 理解这些概念和实践技巧将有助于你更好地进行C#编程,特别是在处理复杂的数据结构和交互时。
![](https://csdnimg.cn/release/download_crawler_static/14867289/bg1.jpg)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 5
- 资源: 894
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- BSC关键绩效财务与客户指标详解
- 绘制企业战略地图:从财务到客户价值的六步法
- BSC关键绩效指标详解:财务与运营效率评估
- 手持移动数据终端:常见问题与WIFI设置指南
- 平衡计分卡(BSC):绩效管理与战略实施工具
- ESP8266智能家居控制系统设计与实现
- ESP8266在智能家居中的应用——网络家电控制系统
- BSC:平衡计分卡在绩效管理与信息技术中的应用
- 手持移动数据终端:常见问题与解决办法
- BSC模板:四大领域关键绩效指标详解(财务、客户、运营与成长)
- BSC:从绩效考核到计算机网络的关键概念
- BSC模板:四大维度关键绩效指标详解与预算达成分析
- 平衡计分卡(BSC):绩效考核与战略实施工具
- K-means聚类算法详解及其优缺点
- 平衡计分卡(BSC):从绩效考核到战略实施
- BSC:平衡计分卡与计算机网络中的应用
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)