具有List类型字段的结构体,但设置为null:堆分配?

问题描述 投票:0回答:1

考虑这样的结构:

struct ExampleStruct
{
    public int ID;
    public List<ExampleStruct> children;
}

下面这行代码会在堆上创建一个对象吗?

ExampleStruct exStrct = new Examplestruct() {ID = 5, children = null};
c# list struct null heap
1个回答
0
投票

如果您将此代码放入测试类中...并在排列和断言调用处设置两个断点,您将能够使用 VS2022 中的诊断窗口来检查详细信息

VS2022 的 Microsoft 文档

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);
    }
}

当第一个断点被击中时 - 从诊断窗口“拍摄快照”。

您应该能够深入查看“引用的对象”。 这意味着引用存储在结构中,但它引用的对象存储在堆中。

所以尽量保持你的结构轻量级。 如果您需要引用最终驻留在堆上的对象,可能最好使用类?

© www.soinside.com 2019 - 2024. All rights reserved.