gpt4 book ai didi

c# - 使用自定义类列表

转载 作者:行者123 更新时间:2023-12-02 22:30:05 25 4
gpt4 key购买 nike

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

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!

最佳答案

这里没有太多要继续的 - 所以下面是对问题的猜测......

您是否正在更改 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<>本身,您更改了 Referenced 对象的值,因此它在任何被引用的地方都会更改。

查看 Value vs Reference types

关于c# - 使用自定义类列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12418949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com