2015-06-04 84 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

爲您的下一個問題創建一個新問題,因爲您的主要問題已修復。 –