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

本文关键字:实例 null 对象 设置 对象引用 | 更新日期: 2023-09-27 18:11:33

我一直得到这个错误消息:对象引用未设置为对象的实例。

  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;

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

你到底希望这句话达到什么效果:

user.IPAddress = user.IPAddress;

我希望它最多是一个no-op。碰巧的是,user变量的值似乎为空。

不清楚该方法意味着什么,但如果user为null,则请求未经过身份验证。奇怪的是,GetXyz方法有一个void返回类型。应该是PopulateIPInfo吗?在这种情况下,传递一个空引用听起来像是一个bug——但是你真的需要决定这个方法是用来做什么的……从长远来看,在方法中创建一个新的User实例不太可能有用。

这取决于您调用GetIPInfo(User User)的方式。似乎您正在传递null作为用户。也许你应该写一些像

这样的东西
GetIPInfo(new User());

但是不清楚User是否必须以某种方式初始化,或者创建一个空实例就足够了。此外,我不明白您想用user做什么。这是一条似乎没有任何效果的指令,除非在IPAddress的setter中有一些其他代码导致一些附带效果,但这是我要避免的。

在评论后编辑:

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

private static User 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;
}

然后你可以调用它并获得一个新的User实例,你可以把它赋值给一个变量或按你喜欢的方式使用

如何:

user = new User; // Or whatever user is supposed to be
user.IPAddress = ipAddress; // Now you can assign an ip address to this property

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

如果请求中没有提供IP地址,则System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]抛出System.NullReferenceException - “Object reference not set to an instance of an object.” -error。因此,您应该检查语句是否抛出异常。