C# 休眠一个不应该发生的私有变量

C# 休眠一个不应该发生的私有变量,c#,asp.net,C#,Asp.net,我有一个奇怪的问题,我正在检查我的代码背后的用户,如果他是积极的或没有作为简单的如果。。在我的页面中,您可以在这里看到加载方法 private TimeReport paramTR; private ZevUser zevUser; protected void Page_Load(object sender, EventArgs e) { ZevUser user = ZevUser.GetById(Int32.Parse(Session["Se

我有一个奇怪的问题,我正在检查我的代码背后的用户,如果他是积极的或没有作为简单的如果。。在我的页面中,您可以在这里看到加载方法

    private TimeReport paramTR;
    private ZevUser zevUser;
    protected void Page_Load(object sender, EventArgs e)
    {
        ZevUser user = ZevUser.GetById(Int32.Parse(Session["SessionId"].ToString()));
        if (user == null)
        {
            this.Response.Redirect("~/About.aspx");
        }
        this.getParameters();

        if (!this.IsPostBack)
        {
            if (paramTR.ZevUser.Active == 0)
            {
                this.Response.Redirect("~/TimeReporting/TimeReportPanel.aspx");
            }

            this.bindData();
        }


    }
但是当我尝试使用这个方法时,我得到了所有的nullreferenceexception为什么会这样。。但是私有ZevUser变量不是null,它已满

我真的不知道为什么会这样,如果有人能解释为什么会这样,那就太酷了


感谢您的帮助和快速回答

此行导致以下问题:

ZevUser user = ZevUser.GetById(Int32.Parse(Session["SessionId"].ToString()));
这是因为
Session[“SessionId”]
可以为null,在本例中为null

如果希望获取ASP.net设置的SessionId,请使用
this.Session.SessionId
()

如果您正在
会话[“SessionId”]
中存储您试图检索的值,则首先执行空检查:

if (Session["SessionId"] != null) { ...

该行导致了以下问题:

ZevUser user = ZevUser.GetById(Int32.Parse(Session["SessionId"].ToString()));
这是因为
Session[“SessionId”]
可以为null,在本例中为null

如果希望获取ASP.net设置的SessionId,请使用
this.Session.SessionId
()

如果您正在
会话[“SessionId”]
中存储您试图检索的值,则首先执行空检查:

if (Session["SessionId"] != null) { ...

在使用类似的东西之前,应该考虑测试<代码> Session ID >代码>变量:

if (!string.IsNullOrEmpty(Session["SessionId"].ToString()))
    ZevUser user = ZevUser.GetById(Int32.Parse(Session["SessionId"].ToString()));

在使用类似的东西之前,应该考虑测试<代码> Session ID >代码>变量:

if (!string.IsNullOrEmpty(Session["SessionId"].ToString()))
    ZevUser user = ZevUser.GetById(Int32.Parse(Session["SessionId"].ToString()));

调试异常的最佳方法是在引发异常时启用调试。 为此,请转到调试>>异常


然后启用前四个复选框(可能),然后尝试调试项目。您将在引发异常的位置停止。

调试异常的最佳方法是在引发异常时启用调试。 为此,请转到调试>>异常


然后启用前四个复选框(可能),然后尝试调试项目。您将在引发异常的位置停止。

您需要对代码进行分解,以便在无法在本地调试此代码的情况下更轻松地进行调试或添加日志记录

请记住,在调试某些东西时,您可能犯的最糟糕的错误是做出假设。从头开始,并按照流程进行操作。不要假设问题是什么,也不要假设问题不可能是什么:

我在下面提供了一个更具可读性的详细版本。现在,您可以围绕此添加日志记录或轻松添加断点:

private TimeReport paramTR;
private ZevUser zevUser;

protected void Page_Load(object sender, EventArgs e)
{
    this.getParameters();

    if (!this.IsPostBack)
    {
        if ((this.paramTR != null) &&
            (this.paramTR.ZevUser != null) &&
            (this.paramTR.ZevUser.Active == 0))
        {
            this.Response.Redirect("~/TimeReporting/TimeReportPanel.aspx");
        }

        this.bindData();
    }

    string sessionId = Session["SessionId"] as string;

    if (sessionId != null)
    {
        int session = int32.Parse(sessionId);

        ZevUser user = ZevUser.GetById(session);

        if (user == null)
        {
            this.Response.Redirect("~/About.aspx");
        }
    }
}

为什么要将会话id传递给
ZevUser.GetById()
?我希望这是一个用户id,或者调用类似于
ZevUser.GetBySessionId()
的方法。目前它非常混乱。

您需要分解代码,以便可以更轻松地进行调试,或者在无法在本地调试此代码的情况下添加日志记录

请记住,在调试某些东西时,您可能犯的最糟糕的错误是做出假设。从头开始,并按照流程进行操作。不要假设问题是什么,也不要假设问题不可能是什么:

我在下面提供了一个更具可读性的详细版本。现在,您可以围绕此添加日志记录或轻松添加断点:

private TimeReport paramTR;
private ZevUser zevUser;

protected void Page_Load(object sender, EventArgs e)
{
    this.getParameters();

    if (!this.IsPostBack)
    {
        if ((this.paramTR != null) &&
            (this.paramTR.ZevUser != null) &&
            (this.paramTR.ZevUser.Active == 0))
        {
            this.Response.Redirect("~/TimeReporting/TimeReportPanel.aspx");
        }

        this.bindData();
    }

    string sessionId = Session["SessionId"] as string;

    if (sessionId != null)
    {
        int session = int32.Parse(sessionId);

        ZevUser user = ZevUser.GetById(session);

        if (user == null)
        {
            this.Response.Redirect("~/About.aspx");
        }
    }
}

为什么要将会话id传递给
ZevUser.GetById()
?我希望这是一个用户id,或者调用类似于
ZevUser.GetBySessionId()
的方法。目前它非常混乱。

Session[“SessionId”]可以为空您更新了什么?Session[“SessionId”]可以为空您更新了什么?