使用 C# 实现反向地理编码时出错

Error while implementing reverse geocoding with C#

我正在尝试使用 C# visual studio 实现反向地理编码。但我无法处理异常“参数超出范围异常”。

代码:

ReverseGeocodeQuery reverseGeocode = new ReverseGeocodeQuery();
reverseGeocode.GeoCoordinate = new GeoCoordinate(47.608, -122.337);
reverseGeocode.QueryCompleted += reverseGeocode_QueryCompleted;
reverseGeocode.QueryAsync();

private void reverseGeocode_QueryCompleted(object sender,
 QueryCompletedEventArgs<IList<MapLocation>> e)
{
   MapAddress geoAddress = e.Result[0].Information.Address;

   if (e.Error == null && e.Result.Count > 0)
   {
       MapAddress address = e.Result[0].Information.Address;
       MessageBox.Show(address.Country);
   }
}

显示的异常是: System.ArgumentOutOfRangeException 未被用户代码处理 Message=Index 超出范围。必须为非负数且小于集合的大小。

请帮助我找到正确的解决方案。

问题是您期望 e.Result(一个数组)有值,但它可能没有,所以当您尝试访问第一个元素 (e.Result[0]) 时,它会失败.

奇怪的是,您正在访问 e.Result[0] 来创建一个您甚至不使用的变量。

按如下方式更改您的代码,您将不会收到错误:

private void reverseGeocode_QueryCompleted(object sender, QueryCompletedEventArgs<IList<MapLocation>> e)
{    
   if (e.Error == null && e.Result != null && e.Result.Count > 0)
   {
       MapAddress address = e.Result[0].Information.Address;
       MessageBox.Show(address.Country);
   }
}