Max*_*Max 2 c# class list c#-4.0
我最近在我的程序中遇到了障碍,其中使用用户定义类的列表已经破坏了数据.例:
class myClass {
public int x;
}
myList<myClass> = new List<myClass>();
myClass myObject = new myClass();
myList.Add(myObject);
myList.Remove(myObject);
Run Code Online (Sandbox Code Playgroud)
当我尝试向列表添加内容时,我的数据已损坏.我相信删除对象也会导致问题,尽管这可能是因为它们首先被破坏了.我在这里和那里都看到过类似的问题,希望有人可以向我解释发生了什么.虽然链接确实为我提供了一些答案,但他们并没有很好地解释幕后发生的事情.
编辑:我之前应该更清楚我的数据是如何被破坏的.添加到列表中时,我的对象字段中的值将被更改.出于我的程序的目的,值应该都是0或1但是当添加到列表时更改为-1到3.
编辑2:问题的根源是对C#的不熟悉.来自C++背景我假设对象是通过值而不是通过引用传递的.将我的自定义类从类更改为结构可立即解决问题.感谢@MattW!
没有太多可以继续下去 - 所以以下是对问题的猜测......
您是否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
Run Code Online (Sandbox Code Playgroud)
即使您没有触及它List<>本身,您也改变了Referenced对象的值,因此它在被引用的任何地方都会被更改.
签出值与引用类型