2013-12-10 62 views
0

我在比較ASP.NET項目中的2個對象時遇到問題,我不確定我是初學者還是什麼,但這是我的實際代碼:未將對象引用設置爲使用ASP.NET項目的對象的實例

private void CheckFriendshipStatus() 
    { 


     if (Object.ReferenceEquals(Session["UserId"].ToString(), Session["CurrentProfileId"].ToString())) 
     { 
      btnAddAsFriend.Visible = false; 
     } 
     else 
     { 
      DataTable dt1 = new DataTable(); 
      string chkfriendRequest = "SELECT * FROM Friends WHERE (MyId='" + Session["UserId"].ToString() + "' and FriendId='" + Session["CurrentProfileId"].ToString() + "') OR (MyId='" + Session["CurrentProfileId"].ToString() + "' and FriendId='" + Session["UserId"].ToString() + "')"; 

然後我嘗試:

var obj1 = Session["UserId"].ToString(); 
    var obj2 = Session["CurrentProfileId"].ToString(); 


     if (obj1 == obj2) 
     { 
      btnAddAsFriend.Visible = false; 
     } 
    else 
    { 

,然後我試着將該值設置爲null,然後再分配會話值。我出於主意,任何其他人將不勝感激

+0

究竟是什麼問題?有例外嗎?比較沒有返回預期結果嗎? –

+0

這就是:對象引用未設置爲對象的實例。 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。 異常詳細信息:System.NullReferenceException:未將對象引用設置爲對象的實例。 – AlexP

回答

0

這實際工作的傢伙,

var obj1 = Session["UserId"].ToString(); 
    var obj2 = Session["CurrentProfileId"].ToString(); 


    if (obj1 == obj2) 
    { 
     btnAddAsFriend.Visible = false; 
    } 

如果這是發生在一些你可能是具有相同的代碼步驟1中,這將解決這個問題!

謝謝大家花時間與我一起浪費並幫助我! :)

0

Session["UserId"]Session["CurrentProfileId"]btnAddAsFriend爲空。無法辨別所提供的詳情。

+0

嗨Spender,他們沒有設置爲空,他們可能被初始化爲空,但值後被添加。 – AlexP

1

如果您將字符串放入Session中,則可以通過強制轉換將它們作爲字符串取回。

var obj1 = (string)Session["UserId"] 

如果obj1恰好爲空,調用obj1.ToString()將導致空引用異常。如上所示的投射將避免該異常(儘管如果它們中的一個爲空,依賴於程序中的慣例,它仍然可能是邏輯錯誤)。

如果它們是字符串,則要使用==運算符。 Object.ReferenceEquals()如果兩個變量引用完全相同的對象,則返回true。由於字符串interning,這將「巧合」通常給你預期的結果,但它可以關閉字符串interning。

UPDATE:

根據您的澄清評論,幾乎可以肯定的是,Session變量你在呼喚.ToString()的一個或兩個是空的。使用我概述的強制轉換方法,並使用調試器查看哪一個爲空。

+0

你知道什麼,你的答案似乎很合理,但它不起作用。但你知道我使用.ToString()方法工作。令人難以置信的吧。實際上,Visual Studio不工作,我不得不重啓它,Voila!謝謝你 – AlexP

相關問題