【发布时间】:2018-05-22 00:38:29
【问题描述】:
我试图理解/调和我对 C# 结构在使用列表和数组进行链接时如何操作的理解。我在这篇文章中遵循 Eric 的解释 Performance of array of struct types
但我要更进一步。
struct Foo { public int A; public int B; public Foo[] ChildFoos; }
Foo parentFoo = new Foo();
parentFoo.ChildFoos = new Foo[1];
parentFoo.ChildFoos[0] = new Foo();
List<Foo> list = new List<Foo>();
list.Add(parentFoo);
但是当您链接调用时,行为会发生变化。 list[0] 应该返回一个值(不是变量),而 ChildFoos[0] 应该返回一个变量。
list[0].ChildFoos[0].A = 4545;
在这种情况下,似乎正在发生的事情是 list[0] 被视为变量而不是值。 ChildFoos[0].A 在列表中的 parentFoo 中维护它的新值。这怎么可能?
将此与尝试在无法编译的父 Foo 结构上设置 A 进行比较。
list[0].A = 877;
这不会编译
【问题讨论】:
-
很好的问题和minimal reproducible example 的极好例子。操作。如果有人想尝试,这里是Fiddle。
-
@himbrombeere 问题是问为什么变化是可观察的,而不是为什么他们不能改变列表中结构的值。