C# - null vs“无法评估表达式”

时间:2010-04-21 21:01:17

标签: c# visual-studio visual-studio-2008 debugging

我有这样的代码:

    private Box mCurBox;

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

mCurBox为空时,CurBox调试器显示“无法评估”。如果它知道下面的值是null,那怎么会弄清楚呢?

2 个答案:

答案 0 :(得分:7)

那是因为你没有默认将mCurBox定义为任何东西,所以编译器将其标记为未定义的行为。
您需要将mCurBox初始化为null,无论是在您定义它的同一行中,还是在构造函数中 一般来说,如果在定义引用类型时没有为它们赋值,那么将引用类型初始化为null是一种很好的做法 此外,当您只是分配和检索时,您可以轻松使用自动属性。

答案 1 :(得分:2)

调试器偶尔会变得笨拙。但是获得“无法评估”的预期情况是发布版本。像这样的简单属性被JIT编译器优化掉了。属性getter代码甚至不存在。