对象引用未设置为使用ASP.NET项目的对象的实例

时间:2013-12-10 01:58:21

标签: c# asp.net sql asp.net-mvc object

我在比较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,然后分配会话值。我没有想法,任何其他人都会受到高度赞赏

3 个答案:

答案 0 :(得分:1)

如果将字符串放入Session,则可以通过强制转换将它们作为字符串取回。

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

如果obj1恰好为null,则调用obj1.ToString()将导致空引用异常。如上所示进行转换将避免该异常(尽管如果其中一个为null,则可能仍然是逻辑错误,具体取决于程序中的约定。)

如果它们是字符串,则您希望使用==运算符。如果两个变量引用完全相同的对象,则Object.ReferenceEquals()返回true。由于字符串实习,无论如何,这将“巧合”通常会给你预期的结果,但是可以关闭字符串实习。

更新:

根据您的澄清评论,几乎可以肯定您调用Session的{​​{1}}个变量中的一个或两个都为空。使用我概述的强制转换方法,并使用调试器查看哪个为null。

答案 1 :(得分:0)

Session["UserId"]Session["CurrentProfileId"]btnAddAsFriend为空。无法从提供的细节中分辨出来。

答案 2 :(得分:0)

这实际上是有用的人,

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


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

如果某些人可能会遇到与步骤1相同的代码,那么这将解决它!

感谢所有花时间浪费我并帮助我的人! :)