我有一个 List<Cat>
其中 Cat
是 struct
具有 ID 和名称。
如何更改 id 为 7 的猫的名字?
我做了(不假思索)
var myCat = catList.Single(c => c.Id == 7);
mycat.Name = "Dr Fluffykins";
当然,结构是值类型。那么是否可以使用这样的技术,或者我必须更改 .Single
进入for
循环并存储索引以用更新的结构替换它?
最佳答案
自 struct
s 是值类型,因为值类型被复制,myCat
以列表中 cat 的副本结束。您需要对 struct
进行操作本身,而不是它的副本。
此外,您可以修改struct
的字段仅当它们是单个变量或数组的一部分时才直接使用 s。 List<T>
的索引器返回一个副本,因此 C# 编译器会产生“无法修改值类型”错误。
我知道的唯一解决方案(除了制作 Cat
为 class
或 re-assigning a modified copy )是制作 catList
一个数组:
var indexOf = catArray
.Select((Cat, Index) => new {Cat, Index})
.Single(p => p.Cat.Id == 7).Index;
catArray[indexOf].Name = "Dr Fluffykins";
关于c# - 在 C# 中更新 List 中结构的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17657578/