This question already has answers here:
Can't change struct's members value inside generic collections
(3个答案)
Cannot modify the return value because it is not a variable
(7个答案)
4年前关闭。
好的,我有一个名为
所以无论如何,我遇到了这个问题,因为最初我尝试使用代码行
但它告诉我“有效”不是变量。如您所见,它不会让我那样修改值:
因此,我假设我必须通过一种方法来修改值。但是显然那也不行吗?
我是否缺少有关列表变量的信息?而且,即使不应该修改该值,为什么调试器也会将“ Active”列出为false,然后将其翻转回true?
谢谢!
(3个答案)
Cannot modify the return value because it is not a variable
(7个答案)
4年前关闭。
好的,我有一个名为
List<SpecialTile>
的SpecialTiles
,其中SpecialTile
是一个结构。 SpecialTile
结构的属性之一是我试图更改的名为Active
的公共布尔值,但由于某些原因它不起作用。我不确定是否相关,但是列表由另一个类的实例拥有。这是通过调试器运行时的图片:所以无论如何,我遇到了这个问题,因为最初我尝试使用代码行
Mgen.SpecialTiles[ESV.editThis].Active = !Mgen.SpecialTiles[ESV.editThis].Active;
但它告诉我“有效”不是变量。如您所见,它不会让我那样修改值:
因此,我假设我必须通过一种方法来修改值。但是显然那也不行吗?
我是否缺少有关列表变量的信息?而且,即使不应该修改该值,为什么调试器也会将“ Active”列出为false,然后将其翻转回true?
谢谢!
最佳答案
这是结构的问题。调用列表索引器MGen.SpecialTiles[x]
将返回存储在列表中的结构的副本,因此您在该结构上调用的任何方法都将对该副本进行操作。而且由于该副本是临时的,因此最终使用该方法所做的更改最终将被放弃。
如果将SpecialData
更改为类,这应该可以解决您的问题。
10-04 13:26