C# CS1612错误求助:无法修改Figur.Standort的返回值
问题解决:CS1612错误无法修改Figur.Standort的返回值
你的问题出在值类型的特性上:Pos是struct(值类型),当你访问Figur.Standort这个属性时,返回的是当前Pos值的一个临时副本。你试图修改这个副本的X和Y属性,但这个副本在语句结束后就会被丢弃,编译器不允许这种无意义的操作,所以抛出了CS1612错误。
下面给你两种可行的解决办法:
方法一:把Pos从struct改为class
将Pos定义为引用类型(class),这样访问Standort时返回的是对象引用,修改其X、Y会直接作用于原对象:
class Pos // 这里把struct改成class { public int X { get; set; } public int Y { get; set; } public Pos(int x, int y) { X = x; Y = y; } }
其他代码不需要修改,Bewegen方法里的代码就能正常工作。
方法二:保持Pos为struct,创建新实例重新赋值
如果想保留Pos作为值类型,需要在Bewegen方法中计算出新的坐标,创建一个新的Pos实例,再赋值给Standort属性:
public void Bewegen(int zugIndex) { // 计算新的坐标 int newX = Standort.X + Möglichkeiten[zugIndex].X; int newY = Standort.Y + Möglichkeiten[zugIndex].Y; // 创建新的Pos实例并赋值给Standort Standort = new Pos(newX, newY); }
这样就绕过了修改临时副本的问题,直接更新Standort属性的整个值。
内容的提问来源于stack exchange,提问作者Sengur
相关产品推荐
相关产品推荐

