0

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

  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;
4

5 回答 5

2

您到底期望此语句实现什么:

user.IPAddress = user.IPAddress;

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

目前尚不清楚该方法的用途,但大概如果user为 null 则请求未经身份验证。GetXyz一个方法有一个void返回类型是很奇怪的。PopulateIPInfo例如应该是吗?在那种情况下,传递一个空引用听起来像是一个错误——但你真的需要决定该方法的用途......在该方法User中创建一个新实例不太可能有用从长远来看。

于 2011-10-17T13:10:08.687 回答
1

怎么样:

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

user.IPAddress = ipAddress; // Now you can assign an ip address to this property
于 2011-10-17T13:09:49.910 回答
1

这取决于您调用GetIPInfo(User user)的方式。似乎您将 null 作为user传递。也许你应该写类似

GetIPInfo(new User());

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

在您发表评论后进行编辑:

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

私人静态用户GetIPInfo(){用户用户=新用户();

  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 实例,您可以将其分配给变量或随意使用。

于 2011-10-17T13:17:12.780 回答
1

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

于 2011-10-17T13:21:12.160 回答
0
于 2011-10-25T10:18:45.250 回答