2

我最近在我的程序中遇到了一个障碍,使用用户定义类的列表会破坏数据。例子:

class myClass {
    public int x;
}

myList<myClass> = new List<myClass>();
myClass myObject = new myClass();

myList.Add(myObject);
myList.Remove(myObject);

当我尝试向列表中添加某些内容时,我的数据已损坏。我相信删除对象也会导致问题,尽管这可能是因为它们首先被损坏了。我在这里那里看到过类似的问题,并希望有人可以向我解释发生了什么。虽然这些链接确实为我提供了一些答案,但它们并没有很好地解释幕后发生的事情。

编辑:我之前应该更清楚我的数据是如何被破坏的。我的对象字段中的值在添加到列表时正在更改。就我的程序而言,这些值都应该是 0 或 1,但是当添加到列表中时会变为 -1 到 3。

编辑 2:问题的根源是不熟悉 C#。来自 C++ 背景,我假设对象是按值传递的,而不是按引用传递的。将我的自定义类从类更改为结构立即解决了这个问题。感谢@MattW!

4

1 回答 1

5

这里没有太多可做的事情 - 所以以下是对问题的猜测......

myObject将其添加到 后,您是否更改了值List<>?请记住,由于您将 a 添加Class到列表中(并且所有类都是引用类型),如果您myObject在将其添加到列表后更改值,它将在任何地方(包括您的内部List<>)更改。

例如:

List<myClass> myList = new List<myClass>();
myClass myObject = new myClass();
myObject.x = 5;

myList.Add(myObject);
Console.WriteLine(myList[0].x); //this will be 5

myObject.x = 7;
Console.WriteLine(myList[0].x); //this will be 7

即使你没有触及它List<>本身,你也改变了被引用对象的值,所以它在被引用的任何地方都被改变了。

查看值与参考类型

于 2012-09-14T13:33:50.483 回答