List问题

xiaohu9711 2010-08-30 01:32:19
在list中使用结构体的时候,怎么修改结构中的数据。
public List<structCars> lstCars = new List<structCars>();

//struct:
public struct structCars
{
public bool bValid;
}

我现在想修改lstCars列表中的结构体数据?

我使用lstCars[i].bValid时出现:无法修改“System.Collections.Generic.List<structCars>.this[int]”的返回值,因为MainForm.cs它不是变量
...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Peter200694013 2010-08-30
  • 打赏
  • 举报
回复
错误原因:
分析错误:
list将Item属性实现为[]操作,所以a[i]是执行return的,STRUCT是值类型的,当用下标操作返回时,是值拷贝操作。就是将a[i]中的struct赋给临时变量,而这个赋值过程是值拷贝,值拷贝是内存复制,所以当赋值"jhon"时,只更改临时变量,而不会改变LIST中的元素所指向的内存。C#为了避免这个问题和C#的严谨,所以在编译时作为错误处理。

-----------------------------
更多信息:
MSDN关于C#结构的说明:C#中的结构和C++是完全不同的,C++结构和类没有明显界限,C#中结构则是完全不同的。
structs 是值类型,而类是引用类型。对于 structs,构造函数的工作方式有一些差异。尤其是,编译器始终提供一个默认的无参数构造函数,它是不允许替换的。 类在人为定义了构造函数后,默认构造函数被替换。

结构的副本由编译器自动创建和销毁,因此不需要使用默认构造函数和析构函数。实际上,编译器通过为所有字段赋予默认值(参见默认值表)来实现默认构造函数。结构不能从类或其他结构继承。

结构是值类型 -- 如果从结构创建一个对象并将该对象赋给某个变量,变量则包含结构的全部值。复制包含结构的变量时,将复制所有数据,对新副本所做的任何修改都不会改变旧副本的数据。由于结构不使用引用,因此结构没有标识 -- 具有相同数据的两个值类型实例是无法区分的。C# 中的所有值类型本质上都继承自 ValueType,后者继承自 Object。
大Y 2010-08-30
  • 打赏
  • 举报
回复
在帖出来些code
xiaohu9711 2010-08-30
  • 打赏
  • 举报
回复
我试试,多谢3楼
lvfeng19806001 2010-08-30
  • 打赏
  • 举报
回复
有给他赋值吗?
gomoku 2010-08-30
  • 打赏
  • 举报
回复
写入整个结构体。

structCars car = lstCars[3];
car.bValid = true;
lstCars[3] = car;
xiaohu9711 2010-08-30
  • 打赏
  • 举报
回复
哪里有set方法啊?
huangqz2008 2010-08-30
  • 打赏
  • 举报
回复
你的Get,Set方法呢?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧