我有一个List<Cat>地方Cat是struct有一个ID和一个名称.
如何更改ID为7的猫的名称?
我做了(没想到)
var myCat = catList.Single(c => c.Id == 7);
mycat.Name = "Dr Fluffykins";
Run Code Online (Sandbox Code Playgroud)
但当然,结构是价值类型.那么是否可以使用这样的技术,或者我是否必须更改.Single为for循环并存储索引以使用更新的结构替换它?
由于structs 是值类型,并且由于值类型会被复制,myCat因此最终会得到列表中 cat 的副本。您需要对其struct本身进行操作,而不是对其副本进行操作。
struct此外,只有当 s 的字段是单个变量或数组的一部分时,才可以直接修改它们。List<T>的索引器返回一个副本,因此 C# 编译器会生成“无法修改值类型”错误。
我知道的唯一解决方案(缺少创建Cat或class重新分配修改后的副本)是创建catList一个数组:
var indexOf = catArray
.Select((Cat, Index) => new {Cat, Index})
.Single(p => p.Cat.Id == 7).Index;
catArray[indexOf].Name = "Dr Fluffykins";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |