未保留数组中对象的引用

Reference of object in array not kept

我遇到了一个问题,就是对列表中对象的引用丢失了,这就是我详细说明代码的方式:

PropertyObject[] myProperties = new PropertyObject[200];
var objParent = new Parent();
var objProperty = new PropertyObject();

myProperties[0] = objProperty;
objParent.property = myProperties[0];

现在,当我修改 objParent.property 时,它不会修改 myProperties 数组中的对象,有什么解决方法吗?我需要这个,这样我就不必遍历数组了。

这是我修改对象的方式:

public void modifyObject(ref Parent objectToModify) {
   objectToModify.property.isThisCrazy = true;
}

然后我只调用 modifyObject 方法。

structs 是不可变的。将 struct 分配给另一个变量将导致 struct 被复制。

在一个实例上分配属性时,struct 的另一个实例的属性不会更改。因此,您没有在其他参考资料中看到更新。

演示结构问题的示例代码:

struct X
{
    public string Y { get; set; }

    public X(string y) : this()
    {
        Y = y;
    }
}

X x = new X("abc");
X x2 = x;

x2.Y = "def";

Console.WriteLine(x.Y);
Console.WriteLine(x2.Y);

对于 类,您期望 x.Yx2.Y 是相同的,但对于结构则不同。

你写的是 "reference to an object" 丢失了,但是 struct 没有 "reference"。

A struct 具有值类型语义。因此,当您使用 = 进行赋值时,会生成右侧的副本。你这样做:

myProperties[0] = objProperty;

复制值,并将副本放入数组的第 0 个条目。

如果您稍后修改 "original" 实例 objProperty,该更改将不会出现在数组中保存的副本中。

这不是数组问题。所有 struct 值分配都会发生同样的情况。例如:

var objProperty2 = objProperty;

如果原始 objProperty 之后发生变异,复制的值 objProperty2 将不受影响。例如参见 [​​=19=].

有些人认为可变结构是邪恶的。