2013-10-14 86 views
0

對不起,如果這是一個轉發,但我還沒有找到任何材料,可以給我一個答案。袒護我,我沒有專業的ASP。NullreferenceException - 對象引用未設置爲對象的實例

所以我的問題是我得到的Exception: Object Reference未設置爲對象的實例...

我有一個存儲串specifik一個Globalvariables類,如果字符串被稱爲「OK」,那麼我應該能夠加載頁面,但如果字符串是「無效」,我不應該能夠加載頁面。

在我的默認頁

,我有以下Page_Load方法:

protected void Page_Load(object sender, EventArgs e) 
{ 
    var masterPage = Master; 

    if (masterPage != null) 
    { 
     if (GlobalVariables.Data.StartsWith("OK")) 
     { 
      //Do stuff 
     } 
     else 
     { 
      // Do stuff 
     } 
    } 
} 

如果我寫GlobalGlobalVariables.Data == "OK"它工作正常,但如果我寫了像上面我得到的錯誤...希望我溫柔的靈魂給我一些指導。

+4

這意味着'GlobalVariables.Data'是空 –

+0

你在哪裏初始化'GlobalVariables.Data'?而且,if語句沒有多大意義。也許你想用'as'操作符來檢查你的主人是否是某種類型的使用:'var masterPage = this。主人爲MyMasterPage;'。 –

+0

我認爲你得到了GlobalVariables.Data = Null,所以它適用於「GlobalGlobalVariables.Data ==」OK「條件。 – mit

回答

1

看起來的GlobalVariables.Data值不區分大小寫的檢查之前,是沒有得到設置Page_Load或者它沒有默認值。

解決方案1:添加默認值。

public static class GlobalVariables 
{ 
    private static string _data; 

    public static string Data 
    { 
     get { return _data ?? "Invalid"; } 
     set { _data = value; } 
    } 
} 

用法:

if(GlobalVariables.Data.Equals("Ok", StringComparison.OrdinalIgnoreCase)) 
{ 

} 
else 
{ 

} 

但它聽起來像是你想有一個標誌,那麼爲什麼不使用enum

解決方案2:枚舉

public enum DataStatus 
{ 
    Invalid, 
    Ok 
} 

public static class GlobalVariables 
{ 
    public DataStatus DataStatus { get; set; } 
} 

用法:

if(GlobalVariables.DataStatus == DataStatus.Ok) 
{ 

} 
else 
{ 

} 
+0

我試過了,它的工作,似乎這是我的問題。我其實只是認爲它可以在page_load上工作而無需將其設置爲默認值。非常感謝 –

+0

那麼' string'是一個引用類型,所有引用類型的默認值爲null。訪問一個null對象的方法將拋出一個'NullReferenceException'因爲該對象是未初始化的。 – Romoku

0

嘗試,如果你的字符串被分配到一些螞蟻更改代碼位

if (!string.IsNullOrWhiteSpace(GlobalVariables.Data) && GlobalVariables.Data.StartsWith("OK")) 
{ 
    //Do stuff 
} 
else 
{ 
    // Do stuff 
} 

首先檢查,然後是它的符號OK開始。

1

我相當肯定你沒有初始化全局變量「GlobalVariables.Data」。 .NET編譯器會自動將它初始化爲空,這就是爲什麼你會得到空引用異常。 ==是一個靜態方法(如果您好奇,請參閱運算符重載MSDN文檔),這就是爲什麼它不拋出異常。

這一切都說了,在這種情況下,您似乎更喜歡使用布爾值而不是字符串,但我對您的用例不熟悉。

0

如果以零件開始是整個字符串,則應該避免使用「StartsWith」方法。我建議做這樣的事,而:

//這是什麼樣的價值可能

if(!string.IsNullorEmpty(GlobalVariables.Data)) 
    {  
     if (GlobalVariables.Data.Equals("ok",StringComparison.OrdinalIgnoreCase)) 
     { 
      //Do stuff 
     } 
    } 
+0

這是否解決了這個問題? –

相關問題