考虑这样的结构:
struct ExampleStruct
{
public int ID;
public List<ExampleStruct> children;
}
下面这行代码会在堆上创建一个对象吗?
ExampleStruct exStrct = new Examplestruct() {ID = 5, children = null};
如果您将此代码放入测试类中...并在排列和断言调用处设置两个断点,您将能够使用 VS2022 中的诊断窗口来检查详细信息
struct ExampleStruct
{
public int ID;
public List<ExampleStruct> children;
}
public class StackOverflowStructQ
{
[Fact]
public void Method_Condition_Expectation()
{
// Arrange
ExampleStruct es = new() { ID = 1, children = [] };
// Act
// Assert
Assert.NotNull(es.children);
}
}
当第一个断点被击中时 - 从诊断窗口“拍摄快照”。
您应该能够深入查看“引用的对象”。 这意味着引用存储在结构中,但它引用的对象存储在堆中。
所以尽量保持你的结构轻量级。 如果您需要引用最终驻留在堆上的对象,可能最好使用类?