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年前关闭。
            
                    
好的,我有一个名为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