C#后端开发笔记

文章通过示例解释了在C#编程中,当在循环中使用同一对象并添加到列表时,会导致所有列表项引用相同值的问题。正确的做法是在每次迭代时创建新的Person对象,以确保每个对象独立并保存不同的Name值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • C# IList 在循环内只新增一次

一、先给现象:


public class Person
{
    public string Name{get;set;}
    public int age{get;set;}
}

pubclic class PersonName 
{
    public string Name{get;set;}
}
IList<PersonName> nameList = new List<PersonName>();
//造数据演示
nameList.Add(New PersonName{Name="小雷"});
nameList.Add(New PersonName{Name="小峰"});

IList<Person> personList = new List<Person>();
Person newpeople = new Person();
newpeople.age = 2;

foreach(var name in nameList)
{
    newpeople.Name = name;
    personList.Add(newpeople)
}
//此时personList.count = 1; 里面的数据是:Person{age=2,Name="小峰"}
//因为在迭代中第一个Name小雪被第二Name"小峰"替代了

二、解析:

newpeople指的是一块区域,只有一块。在循环迭代中List.Add()加的是同一块区域,相当于对一块区域重复做更新操作。

正确写法如下:


IList<Person> personList = new List<Person>();

foreach(var name in nameList)
{
    Person newpeople = new Person();
    newpeople.age = 2;
    newpeople.Name = name;
    personList.Add(newpeople)
}

后端创建EXCEL,Word文档
NPOI库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值