无法修改返回值 Dictionary <string, Point>,因为它不是一个变量。

3

我在标题中看到了这个错误,以下是问题代码:

Dictionary<string, Point> dicPoint = new Dictionary<string, Point>();
dicPoint.Add("point1", new Point());
dicPoint["point1"].X++;

在增加X的时候,出现了错误。这个问题有什么解决办法?


@HastaTamang:虽然这是正确的,但这是一个编译时错误,与如果它编译会收到的NullReferenceException无关。 - Jon Skeet
C# 在这个方面非常令人烦恼。 - sYsTeM
你更希望它不会给你编译时错误,而是让你修改值的副本,而不会修改字典中的内容吗?如果您想要引用类型行为,请使用引用类型。我认为C#在这里所做的一切都没有问题。 - Jon Skeet
@Jon Skeet。我是C#的初学者,对我来说这很复杂,我必须深入挖掘 ;) - sYsTeM
1个回答

5
我假设您正在使用结构体作为Point类型。因此,获取dicPoint["point1"]将创建该值的副本。更改该复制不会更改字典中的内容。相反,您需要获取该值,修改它,然后替换字典中的条目:
var point = dicPoint["point1"];
point.X++;
dicPoint["point1"] = point;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接