0

我得到Exception: Object Reference未设置为对象的实例。

我有一个存储一个特定字符串的 Globalvariables 类,如果该字符串被称为“OK”,那么我应该能够加载页面,但如果字符串是“无效”,我不应该能够加载页面。

在我的默认页面中,我有以下 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

4 回答 4

1

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

综上所述,在这种情况下,您似乎更希望使用布尔值,而不是字符串,但我不熟悉您的用例。

于 2013-10-14T13:45:08.213 回答
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
{

}
于 2013-10-14T13:49:14.250 回答
0

尝试更改代码

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

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

于 2013-10-14T13:44:36.883 回答
0

如果开头部分是整个字符串,则应避免使用“StartsWith”方法。我会建议做这样的事情,而不是:

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

    if(!string.IsNullorEmpty(GlobalVariables.Data))
   {       
      if (GlobalVariables.Data.Equals("ok",StringComparison.OrdinalIgnoreCase))
       {
          //Do stuff
       }
    }
于 2013-10-14T13:46:08.737 回答