使用自定义类列表

时间:2012-09-14 06:03:29

标签: c# list class c#-4.0

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

class myClass {
    public int x;
}

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

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

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

编辑:我之前应该更清楚我的数据是如何被破坏的。添加到列表中时,我的对象字段中的值将被更改。出于我的程序的目的,值应该都是0或1但是当添加到列表时更改为-1到3.

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

1 个答案:

答案 0 :(得分:5)

这里没有太多内容 - 所以以下是对问题的猜测......

在将myObject添加到List<>后,您是否更改了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<>)内。

例如:

{{1}}

即使您没有触及{{1}}本身,您也更改了Referenced对象的值,因此它在被引用的任何地方都会被更改。

结帐Value vs Reference types