1

我正在尝试从另一个类(例如 B 类)更改一个结构值(位于 A 类中)我编写了一个获取该结构的方法(该方法位于 A 类中),但我得到的只是一个浅拷贝(价值观并没有真正改变......)有什么帮助吗?

4

1 回答 1

3

是的,这就是结构发生的事情。您需要在本地进行更改,然后再次浅拷贝回来。例如:

public class Foo
{
    public Point Location { get; set; }
}

public class Bar
{
    private Foo foo = new Foo();

    public void MoveFoo()
    {
        Point location = foo.Location;
        location.X += 10;
        location.Y += 20;
        // Copy it back
        foo.Location = location;
    }
}

就我个人而言,我首先尝试避免使结构可变 - 但通常会给它们我所谓的“伪突变器”方法,这些方法会返回一个带有适当更改的新值。例如,对于一个Point结构,我可能有这样的方法:

public Point TranslatedBy(int dx, int dy)
{
    return new Point(x + dx, y + dy);
}

那么MoveFoo上面的方法就是:

foo.Location = foo.Location.TranslatedBy(10, 20);
于 2013-11-03T09:23:08.190 回答