2010-04-21 30 views
6

我有這樣的代碼:C# - 空VS 「無法計算表達式」

private Box mCurBox; 

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

mCurBox爲null,則CurBox調試器說: 「無法評價」。如果它知道下面的值是空的,那麼它怎麼會不知道呢?

回答

7

這是因爲您尚未將mCurBox默認定義爲任何東西,因此編譯器將其標記爲未定義的行爲。
您需要將mCurBox初始化爲null,或者在您定義它的同一行中,或者在構造函數中。
一般來說,如果在定義引用類型時不給它們賦值,那麼最好將引用類型初始化爲null。
此外,看到你只是分配和檢索,你可以很容易地使用自動屬性。

+0

我對這樣的說法表示懷疑:「將引用類型初始化爲null是一種好的做法」;框架負責將這些值分配給它們的默認值。 – 2013-12-03 17:53:03

2

調試器可能會不時變得蹩腳。但是獲得「無法評估」的預期情況是發佈版本。像這樣的簡單屬性可以通過JIT編譯器進行優化。財產getter代碼甚至不會存在。