2013-03-15 111 views
2

爲什麼此代碼會拋出NullReferenceException查詢字符串錯誤

例外:

System.NullReferenceException: Object reference not set to an instance of an object.

代碼:

if ((string.IsNullOrEmpty(Request.QueryString["Sno"].ToString())) 
    && (string.IsNullOrEmpty(Request.QueryString["Name"].ToString()))) 
{ 
    lblBookedBy.Text = ""; 
    lblSno.Text = ""; 
} 
else 
{ 
    lblBookedBy.Text = Request.QueryString["Name"].ToString(); 
    lblSno.Text = Request.QueryString["Sno"].ToString(); 
} 
+0

你檢查了我的答案嗎? – Arshad 2013-03-15 10:59:11

+1

答其他人在這裏回答他們的想法是正確的嗎? – TalentTuner 2013-03-15 11:15:39

回答

-1

使用Convert.ToString()而不是.ToString()避免空引用異常:

if (string.IsNullOrEmpty(Convert.ToString(Request.QueryString["Sno"])) && string.IsNullOrEmpty(Covert.ToString(Request.QueryString["Name"]))) 
{ 
    lblBookedBy.Text = ""; 
    lblSno.Text = ""; 
} 
else 
{ 
    lblBookedBy.Text =Convert.ToString(Request.QueryString["Name"]); 
    lblSno.Text =Convert.ToString(Request.QueryString["Sno"]); 
} 
+0

您是否回滾我的更改並自己完成相同的編輯?我不是那個拒絕我職位變化的人。 ;) – eandersson 2013-03-15 11:52:56

1

您試圖投Request.QueryString["Sno"]爲字符串,而它的值是null

1

這是最有可能的b因爲集合查詢字符串中沒有鍵「Sno」或「Name」,導致在嘗試調用.ToString()時發生異常。

檢查的Request.QueryString [ 「斯諾」]或的Request.QueryString [ 「名稱」]爲空,調用的ToString()之前

+0

是的,我知道他們是空的,但在此之後,其他部分應該運行。爲什麼錯誤? – Gaurav 2013-03-15 10:52:11

+0

@Gaurav你可以將null轉換爲字符串嗎? – TalentTuner 2013-03-15 10:55:13

+0

您的if語句檢查它們是否爲空(或空)如果其中只有一個爲null,則會看到此錯誤。相反,在你的if測試中使用或。 – 2013-03-15 11:05:05

1

如果Request.QueryString["Sno"]Request.QueryString["Name"]不返回任何對象不是調用的ToString會拋出異常

1

在空檢查卸下的ToString(),因爲當查詢字符串參數不可用您正在嘗試鍵入無效變量字符串....

if ((string.IsNullOrEmpty(Convert.ToString(Request.QueryString["Sno"]))) && (string.IsNullOrEmpty(Covert.ToString(Request.QueryString["Name"])))) 
2

我建議您執行以下操作。

if (Request.QueryString["Sno"] == null || Request.QueryString["Name"] == null) 
{ 
    lblBookedBy.Text = ""; 
    lblSno.Text = ""; 
} 
else 
{ 
    lblBookedBy.Text = Request.QueryString["Name"].ToString(); 
    lblSno.Text = Request.QueryString["Sno"].ToString(); 
} 

你最有可能在if聲明得到一個NullReference。這樣你肯定不會遇到這種情況,最壞的情況是,如果兩個變量都被實例化,但是一個或多個變量包含一個空字符串,它將簡單地將Text設置爲empty

或者,如果您使用Convert.ToString與許多其他建議一樣,則可以通過跳過if語句簡化代碼。

lblBookedBy.Text = Convert.ToString(Request.QueryString["Name"]); 
lblSno.Text = Convert.ToString(Request.QueryString["Sno"]); 

在最壞的情況下,這些人會Null,並會導致文本框來顯示結果的一個,而另一個是空的。

此外,假設Request.QueryString支持它,您可以使用TryGetValue

+0

如果'[「Sno」]'和'[「Name」]'爲空,它會拋出一個異常。 – Arshad 2013-03-15 11:12:58

+0

我看不出它們中的哪一個可能爲空。我沒有在'if'語句中做'ToString'。 – eandersson 2013-03-15 11:15:30

+0

我已編輯你的答案,如果我沒有錯 – Arshad 2013-03-15 11:17:56