C#中的null与“Could not evaluate expression”的区别

6

我有这样的代码:

    private Box mCurBox;

    public Box CurBox
    {
        get { return mCurBox; }
        set
        {
            if (mCurBox != value)
            {
                mCurBox = value;
            }
        }
    }

mCurBox 为空时,调试器会显示“无法计算”。如果它知道下面的值为空,那么为什么它不能弄清楚呢?

2个回答

7

这是因为您没有默认定义mCurBox的值,所以编译器将其标记为未定义的行为。
您需要将mCurBox初始化为null,可以在定义它的同一行中或在构造函数中进行初始化。
通常情况下,如果在定义引用类型时没有分配任何值,则将其初始化为null是一个好习惯。
此外,鉴于您只是分配和检索,您可以轻松地使用自动属性。


我对“将引用类型初始化为null是一个好习惯”这个说法表示怀疑;框架会负责将这些值分配给它们的默认值。 - Luis Filipe

2

调试器有时会出现问题。但是出现“无法评估”情况的预期情况是在Release构建中。像这样的简单属性被JIT编译器优化掉了。属性getter代码甚至不存在。


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