NullreferenceException - 对象引用未设置为对象的实例

时间:2013-10-14 13:39:36

标签: c# asp.net code-behind

我很抱歉,如果这是一个转贴,但我找不到任何可以给我答案的材料。和我一起,我不是ASP的专业人士。

所以我的问题是我得到Exception: Object Reference未设置为对象的实例...

我有一个Globalvariables类,它存储一个特定字符串,如果字符串被调用" OK",那么我应该能够加载页面,但如果字符串是"无效&#34 ;我不能加载页面。

在我的默认页面中,我有以下Page_load方法:

protected void Page_Load(object sender, EventArgs e)
{
    var masterPage = Master;

    if (masterPage != null)
    {
        if (GlobalVariables.Data.StartsWith("OK"))
        {
            //Do stuff
        }
        else
        {
            // Do stuff
        }
    }
}

如果我写GlobalGlobalVariables.Data == "OK"它可以正常工作,但如果我像上面那样写,我会得到错误...希望我温柔的灵魂可以给我一些指导。

4 个答案:

答案 0 :(得分:1)

我很确定你没有初始化全局变量“GlobalVariables.Data”。 .NET编译器会自动将其初始化为null,这就是您获得null引用异常的原因。 ==是一个静态方法(如果你很好奇,请参阅运算符重载MSDN doc以获取更多信息),这就是为什么它不会抛出异常。

这就是说,在这种情况下,似乎更像是你可能想要使用布尔值,而不是字符串,但我不熟悉你的用例。

答案 1 :(得分:1)

似乎GlobalVariables.Data的值未在Page_Load之前设置,或者它没有默认值。

解决方案1:添加默认值。

public static class GlobalVariables
{
    private static string _data;

    public static string Data
    {
        get { return _data ?? "Invalid"; }
        set { _data = value; }
    }
}

用法:

if(GlobalVariables.Data.Equals("Ok", StringComparison.OrdinalIgnoreCase))
{

}
else
{

}

但听起来你想要一面旗帜,为什么不使用enum

解决方案2:枚举

public enum DataStatus
{
    Invalid,
    Ok
}

public static class GlobalVariables
{
    public DataStatus DataStatus { get; set; }
}

用法:

if(GlobalVariables.DataStatus == DataStatus.Ok)
{

}
else
{

}

答案 2 :(得分:0)

尝试稍微更改代码

if (!string.IsNullOrWhiteSpace(GlobalVariables.Data) && GlobalVariables.Data.StartsWith("OK"))
{
    //Do stuff
}
else
{
    // Do stuff
}

首先检查您的字符串是否已分配给某个蚂蚁,然后以OK符号开头。

答案 3 :(得分:0)

如果以part开头是你的整个字符串,你应该避免使用“StartsWith”方法。我建议做这样的事情:

//这是一个不区分大小写的检查可能的值

    if(!string.IsNullorEmpty(GlobalVariables.Data))
   {       
      if (GlobalVariables.Data.Equals("ok",StringComparison.OrdinalIgnoreCase))
       {
          //Do stuff
       }
    }