List附加对象

List里面的某个对象需要修改,赋值

可以使用ALL或者ForEach,All的话,不能直接使用赋值对象只能赋值对象的某个字段

C# 复制代码
        static void Main(string[] args)
        {

            List<UserData> UserDatas = new List<UserData>
            {
                new UserData { Id = 1, Name = "小明" },
                new UserData { Id = 2, Name = "小红" },
                new UserData { Id = 3, Name = "小智" }
            };

            var userTemp = UserDatas.FirstOrDefault(p => p.Id == 1);
            userTemp = new UserData { Id = 4, Name = "测试" };
            Console.WriteLine("----------------------------");
            Console.WriteLine("查询出来替换后");
            foreach (var item in UserDatas)
            {
                Console.WriteLine(item.Name);
            }
            Console.WriteLine("替换失败");
            // userTemp 只是一个局部变量你修改它是修改不到list的
            Console.WriteLine("----------------------------");
            Console.WriteLine("使用for循环");
            for (int i = 0; i < UserDatas.Count; i++)
            {
                if (UserDatas[i].Id == 1)
                {
                    UserDatas[i] = new UserData { Id = 4, Name = "for循环测试" };
                }
            }

            foreach (var item in UserDatas)
            {
                Console.WriteLine(item.Name);
            }
            Console.WriteLine("----------------------------");
            Console.WriteLine("使用all循环 附加对象");
            var userTemp1 = new UserData { Id = 3, Name = "all循环附加对象" };
            UserDatas.Where(p => p.Id == 3).All(l => { l = userTemp1; return true; }); // 直接赋值对象是修改不了


            foreach (var item in UserDatas)
            {
                Console.WriteLine(item.Id);
                Console.WriteLine(item.Name);
            }
            Console.WriteLine("----------------------------");
            Console.WriteLine("使用all循环 赋值");
    
            UserDatas.Where(p => p.Id == 3).All(l => { l.Id = 3; l.Name = "all循环赋值"; return true; });
            foreach (var item in UserDatas)
            {
                Console.WriteLine(item.Id);
                Console.WriteLine(item.Name);
            }
            Console.WriteLine("----------------------------");
            Console.WriteLine("使用ForEach循环");
            UserDatas.ForEach(p =>
            {
                if (p.Id == 3)
                {
                    p.Name = "ForEach循环赋值";
                }
            });

            foreach (var item in UserDatas)
            {
                Console.WriteLine(item.Name);
            }


            Console.ReadLine();
        }

        public class UserData
        {
            public int Id { get; set; }

            public string Name { get; set; }
        }
    }

结果:

C# 复制代码
----------------------------
查询出来替换后
小明
小红
小智
替换失败
----------------------------
使用for循环
for循环测试
小红
小智
----------------------------
使用all循环 附加对象
4
for循环测试
2
小红
3
小智
----------------------------
使用all循环 赋值
4
for循环测试
2
小红
3
all循环赋值
----------------------------
使用ForEach循环
for循环测试
小红
ForEach循环赋值
相关推荐
一个人旅程~2 小时前
linux如何“抢”过windows的usb移动硬盘权限对0磁道损坏的移动硬盘进行尝试修复
linux·windows·经验分享·电脑
不会编程的懒洋洋2 小时前
VisionPro 中 图像预处理工具
图像处理·笔记·c#·视觉检测·visionpro
Keano Reurink3 小时前
长尾关键词自动化扩展:从1个种子词到1000个长尾词
运维·windows·自动化
新时代农民工~4 小时前
PostgreSQL 主从复制(流复制)实战配置指南:Windows 环境详细步骤
数据库·windows·postgresql
雪豹阿伟4 小时前
9.C# —— string拓展方法、StringBuilder高性能处理
c#·上位机
AI周红伟5 小时前
通用业务智能体OpenClaw+Skills+RAG+Agent构建案例实操
大数据·人工智能·windows·百度·copilot
a58808115 小时前
WarCraft III《魔兽争霸3冰封王座》原版安装包——游戏玩法、配置要求与详细安装教程
windows·游戏·游戏程序
李星星_Alex5 小时前
如何通过 C# 抓取抖音 RTMP 推流码实现自主推流
c#·抖音
Chirp7 小时前
Windows下借助wsl2读取ext4格式磁盘
linux·windows
qq7422349848 小时前
全面深入的C#核心知识体系与编程实践精要——从语法基础到高级特性系统学习指南
java·算法·c#