【问题标题】:Object reference not set to an instance of an object working with ASP.NET Project对象引用未设置为使用 ASP.NET 项目的对象的实例
【发布时间】:2013-12-10 01:58:21
【问题描述】:

我在比较 ASP.NET 项目中的 2 个对象时遇到问题,我不确定我是初学者还是什么,但这是我的实际代码:

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,然后分配会话值。我没有想法,任何其他人将不胜感激

【问题讨论】:

  • 到底是什么问题?有例外吗?比较是否没有返回预期结果?
  • 就是这样:对象引用未设置为对象的实例。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。

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


【解决方案1】:

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

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

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

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

更新:

根据您的澄清评论,几乎可以肯定您调用.ToString()Session 变量之一或两者为空。使用我概述的转换方法,并使用调试器查看哪个为空。

【讨论】:

  • 你知道吗,你的答案似乎很合理,但它不起作用。但你知道我用 .ToString() 方法让它工作的。不可思议吧。实际上,不知何故 Visual Studio 无法正常工作,我不得不重新启动它,瞧!不过谢谢你
【解决方案2】:

Session["UserId"]Session["CurrentProfileId"]btnAddAsFriend 为空。从提供的详细信息中无法判断。

【讨论】:

  • 嗨Spender,它们没有设置为null,它们可能被初始化为null,但值是在它之后添加的。
【解决方案3】:

这确实有效,

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


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

如果你们中的一些人可能使用与第 1 步相同的代码,这将解决它!

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

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 1970-01-01
    • 2020-04-13
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多