一尘不染

更改结构列表中元素的值

c#

我有一个结构列表,我想更改一个元素。例如 :

MyList.Add(new MyStruct("john");
MyList.Add(new MyStruct("peter");

现在,我想更改一个元素:

MyList[1].Name = "bob"

但是,每当我尝试执行此操作时,都会出现以下错误:

无法修改System.Collections.Generic.List.this [int]’的返回值,因为它不是变量

如果我使用类列表,则不会发生此问题。

我猜答案与结构是值类型有关。

因此,如果我有一个结构列表,我应该将它们视为 只读 吗?如果我需要更改列表中的元素,那么应该使用类而不是结构?


阅读 256

收藏
2020-05-19

共1个答案

一尘不染

MyList[1] = new MyStruct("bob");

C#中的struct应该几乎总是设计成不可变的(也就是说,一旦创建,就无法更改其内部状态)。

在您的情况下,您要做的是替换指定数组索引中的整个结构,而不是尝试仅更改单个属性或字段。

2020-05-19