为什么将数组赋值为 null 会创建一个空数组?

4

这是一个奇怪的问题,让我觉得自己可能看错了,但是这里有一些我正在调试的代码:

    private byte[] myCode = null;

    ...

    public bool Tampered
    {
        get
        {
            return Bytes == null;
        }

        set
        {
            if (value)
            {
                if (Bytes != null)
                {
                    ProcessBytes();         /* BREAKPOINT HERE */
                    myCode = null;
                }
            }
        }
    }

我运行了我的代码,执行了someObject.Tampered = true;并在断点处中断。此时调试器显示mycode == bytes[3]。一切都很好。我继续执行ProcessBytes。仍然一切正常。
然后,我继续执行myCode = null;,调试器显示myCode == bytes[0]
发生了什么?我是否已经从根本上破坏了某些东西?myCode不是属性,因此不应该做任何奇怪的事情。C#中的数组是否存在我之前不知道的一些怪癖?

2
哦,不用在意。这全是我的错。把问题说出来确实有帮助。结果发现调试器正在调用“get”,它又调用了Bytes属性,从而重新创建了数组。 - izb
2
你占用了我的时间来测试你的错误。 - Saeed Amiri
1个回答

1

我认为调试器可能正在显示myCode的类型,这种情况下它是一个(未分配)长度为零的byte数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接