为什么会偶尔抛出空引用错误

本文关键字:引用 错误 偶尔 为什么 | 更新日期: 2023-09-27 18:18:16

好吧,这段代码偶尔抛出一个空引用错误,因为返回((AVMain)this. page)。模型没有返回任何东西。我没有能够使这个错误再次出现,即使使用对其他人失败的相同ID值。任何帮助将非常感激!

    protected AVModel Model
    {
        get
        {
            return ((AVMain)this.Page).Model;
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (SessionData.IsAudit.HasValue && SessionData.IsAudit.Value == true)
        {
            cbFlagAudit.Visible = false;
        }
        if (!IsPostBack)
        {
            cbFlagAudit.Checked = this.Model.FlagForAudit.HasValue ? this.Model.FlagForAudit.Value : false;
        }
    }

为什么会偶尔抛出空引用错误

我将首先在整个逻辑中添加一些空引用检查。这应该可以防止NullReferenceException被抛出。

这是

如何?

protected AVModel Model
{
    get
    {
        if(this.Page is AVMain)
        { 
            var page = this.Page as AVMain;
            return page.Model;
        }
        return null;
    }
}
protected void Page_Load(object sender, EventArgs e)
{
    if (SessionData.IsAudit.HasValue && SessionData.IsAudit.Value == true)
    {
        cbFlagAudit.Visible = false;
    }
    if (!IsPostBack)
    {
        var model = this.Model;
        Boolean? value = null;
        if(model != null)
        {
            value = model.FlagForAudit;
        }
        cbFlagAudit.Checked = (value.HasValue && value.Value)
    }
}

谢谢大家的建议,但是这个错误实际上是由于数据库中的权限错误而产生的。它导致存储过程失败,并且没有返回填充对象所需的数据,因此它为空。最初的开发人员并没有在这个项目中加入错误捕获,所以一些本不需要花时间去发现的东西却花了几天时间。永远捕捉你的错误!