2013-07-30 53 views
0

首次讀取設置(在設置之前) - 將引發Object reference not set to an instance of an object.異常。首次使用時的自定義設置類異常(ApplicationSettingsBase)

設置使用DefaultSettingValueAttribute默認值不能在現實情況下,這樣做是因爲它不是一個簡單的類型像我的一個int的例子,不能被描述爲一個字符串。從the docs

DefaultSettingValueAttribute要求的默認值可以被表示爲一個字符串 。

這應該如何避免?

更多信息:

當然,我可以把它包裝在一個try-catch塊,但應該留給特殊情況下,而這是很正常的事情 - 誰將會使用該應用程序爲先每個用戶時間會遇到這個。因爲第一次看起來不對,所以每一次都是這樣。

那麼什麼是正確的解決方案?

下面的代碼:

public class MySettings : ApplicationSettingsBase 
{ 
    [UserScopedSettingAttribute()] 
    public int MyInt 
    { 
     get { return (int)(this["MyInt"]); } // Object reference not set to an instance of an object. 
     set { this["MyInt"] = value; } 
    } 
} 

喊着這樣:

MySettings s = new MySettings(); 
int i = s.MyInt; 

回答

1

你需要指定設置的默認值。我認爲這應該防止記憶。

如果您不能指定默認值,請在getter中進行檢查以查看它是否爲null,如果它將其初始化爲您自己的默認值。

get { 

     if(this["MyInt"] == null) 
      this["MyInt"] = 0; 

     return (int)(this["MyInt"]); 
    } 
+0

謝謝。然而,真正的情況是一個複雜的類型,而不是一個'int' - 所以它不能有一個默認值(因爲它不能被描述成一個字符串)。 – ispiro

+0

@ispiro也許試試我編輯的第二個建議? – gmn

+0

我會試試看。我只是檢查,看到除了不是通過調用對象本身... – ispiro