使用 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);
}
}
我正在尝试使用 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);
}
}