2015-06-04 31 views
-1

我正在尝试使用C#实现使用Visual Studio的反向地理编码。但我无法处理异常“论据超出范围例外”。使用C#实现反向地理编码时出错#

CODE:

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是由用户代码未处理 消息=索引超出范围。必须是非负数且小于集合的大小。

请帮助我解决问题。

回答

1

问题是你期待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); 
    } 
} 
+0

是的,错误得到解决。但是,在触发reverseGeocode_QueryCompleted时没有任何反应。我想获取当前的用户位置(即国家)。请帮我解决这个问题。 – Krisalay

+0

为您的下一个问题创建一个新问题,因为您的主要问题已修复。 –