c# - 在 C# 中更新 List 中结构的属性

标签 c# struct

我有一个 List<Cat>其中 Catstruct具有 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# 编译器会产生“无法修改值类型”错误。

我知道的唯一解决方案(除了制作 Catclassre-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/

相关文章:

c# - 为什么我不能使用 Entity Framework 保存当前的 DateTime.Now

c# - 如何使用 MSI 从 Azure 中的 VMSS 访问服务总线

c# - 声明 C# 属性

c - 当位域大于字节大小时,字节顺序如何影响位域

C++ 结构数组

c# - DataSet 到具有预定义列的 DataGridView

C从文本文件中读取结构

arrays - 如何将 JOIN 映射到具有子结构数组的结构数组

c - 填充链表的函数,但适用于 n 个列表类型

c# - 如何在 EF Core 2.1 中定义外键关系