对象引用未设置为对象的实例,为null

时间:2011-10-17 13:08:08

标签: c# object-reference

我不断收到此错误消息:对象引用未设置为对象的实例。

  private static void GetIPInfo(User user)
  {
      string ipAddress = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();

      string city = string.Empty;
      string region = string.Empty;
      string country = string.Empty;
      double? latitude = -1.00;
      double? longitude = -1.00;

      LocationTools.GetLocationFromIP(ipAddress, out city, out region, out country, out latitude, out longitude);

      user.IPAddress = user.IPAddress; **//error is pointing here**
  }

我需要实例化一些东西吗?

解决这个问题会是这样吗?

 user.IPAddress new user.IPAddress = user.ipAddress;

5 个答案:

答案 0 :(得分:2)

您对此声明的期望到底是什么:

user.IPAddress = user.IPAddress;

我希望它充其量一个无操作。碰巧的是,似乎user变量的值为null。

目前还不清楚该方法的用途,但假设user为null,则请求未经身份验证。奇怪的是GetXyz方法具有void返回类型。它应该是PopulateIPInfo吗?在那种情况下,它听起来像是一个传递空引用的错误 - 但你真的需要决定该方法的意图......在内部创建一个新的User实例是不太可能的从长远来看,该方法将会非常有用。

答案 1 :(得分:1)

怎么样:

user = new User; // Or whatever user is supposed to be

user.IPAddress = ipAddress; // Now you can assign an ip address to this property

答案 2 :(得分:1)

这取决于您调用 GetIPInfo(用户用户)的方式。您似乎是以 user 的身份传递null。也许你应该写类似

的东西
GetIPInfo(new User());

但目前尚不清楚User是否必须以某种方式进行初始化,或者它是否足以创建一个空实例。 此外,我不明白你试图用 user.IPAddress = user.IPAddress; 这是一条似乎根本没有任何效果的指令,除非有其他一些代码IPAddress的setter导致一些附带效应,但这是我要避免的。

评论后编辑:

如果我做对了(但我不确定),也许这与你真正需要的更相似:

私有静态用户GetIPInfo()   {       用户user = new User();

  string ipAddress = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();

  string city = string.Empty;
  string region = string.Empty;
  string country = string.Empty;
  double? latitude = -1.00;
  double? longitude = -1.00;

  LocationTools.GetLocationFromIP(ipAddress, out city, out region, out country, out latitude, out longitude);

  user.IPAddress = ipAddress; 
  // other code to fill the other fields of User

  return user;
}

然后你可以调用它并获得一个可以分配给变量的新用户实例,或者根据需要使用。

答案 3 :(得分:1)

正如Jon指出的那样,你的user似乎是空的。我认为问题出在调用方法中,而不是GetIPInfo中。您可能希望为方法添加一些参数检查。此外,我认为这种方法看起来很奇怪,但我可能没有适当的上下文来理解为什么它看起来像。

答案 4 :(得分:0)

如果请求中未提供IP地址,则

System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]会引发System.NullReferenceException - “Object reference not set to an instance of an object.” - 错误。所以你应该检查语句是否抛出异常。