C#中list创建后无法再修改结构体元素的值

之前没怎么用过c#开发,由于工作原因开始学习c#。今天发现创建了一个list集合(里面的元素是结构体类型),后面再想给它修改和赋值就出现错误了。

代码大致是这样的:

//这里定义了一个学生结构体
public struct Stu
{
	public int age;
	public string name;
}
//创建一个列表
List<Stu> list = new List<Stu>();
//中间省略初始化过程
//然后我开始修改内容
foreach (var u in list)
{
	if(u.age == 15)
	{
		u.name = "张三";
	}
}

这里我一开始用的是迭代器去遍历查找,提示错误u只是一个迭代器变量不能进行赋值。

for (int i = 0; i < list.Count; i++)
{
    if(list[i].age == 15)
	{
		list[i].name = "张三";
	}
}

后面采用for循环的方法,通过下标索引去选择。
提示错误
出现错误提示,无法对list[i]进行修改,得知list[i]只是一个拷贝值,不是一个变量。

解决方法
试了很多个方法,在不修改元素类型的情况下有一个不是很方便的方法,就是创建一个结构体变量,以结构体为单位进行赋值,具体代码如下:

//创建结构体变量
Stu stu;
//在for循环中进行修改赋值
for (int i = 0; i < list.Count; i++)
{
    if(list[i].age == 15)
	{
		//先保存现有成员
		stu.age = 15;
		//再保存要修改的成员
		stu.name = "张三";
		//最后以结构体为单位进行赋值
		list[i] = stu;
	}
}

程序成功通过编译。

由于此方法是以结构体为单位赋值,所以不管你是修改哪个成员,都要给结构体所有成员进行赋值,造成了很多不必要的操作。

猜你喜欢

转载自blog.csdn.net/qq_42410113/article/details/107671049
今日推荐