之前没怎么用过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;
}
}
程序成功通过编译。
由于此方法是以结构体为单位赋值,所以不管你是修改哪个成员,都要给结构体所有成员进行赋值,造成了很多不必要的操作。