2016-04-04 7 views
0

Versuch, zwei Doppelgänger als Zeichenfolgen zu meinem DB zu senden, aber ich bekomme den Fehler: " Verwendung von nicht zugewiesenen lokalen Variablen "lat "+" lng ". Beim ersten Mal arbeite ich mit Doubles, daher weiß ich nicht genau, was genau zu tun ist.Versucht, ein Double zu meinem DB zu senden, "Verwendung von nicht zugewiesenen lokalen Variablen" lat "+" lng "

Geocoder gc = new Geocoder(); 
Task<IEnumerable<Position>> result = 
gc.GetPositionsForAddressAsync(theEnteredAdress); 
IEnumerable<Position> data = await result; 

double lat; 
double lng; 
foreach (Position p in data) 
{ 
    lat = p.Latitude; 
    lng = p.Longitude; 
} 

var sendInfo = await dbAPI.createInfo(lat.ToString(), lng.ToString()); 
// ^^ here are the two errors. I want to send them as strings 
+0

Beachten Sie auch, dass Sie haben Sie nur die lat & long der letzten Position in Daten. Sie überschreiben sie jedes Mal durch die foreach-Schleife. – Kevin

+0

Sind Sie sicher, dass Sie außerhalb der foreach-Schleife zur API aufrufen sollten? Wie oft möchten Sie die API aufrufen? – mason

+0

nur einmal. es funktioniert jetzt gut? – medvedo

Antwort

0

IMO, ist dies ein wenig klarer, was los ist, und sollte das Problem Sie haben zu lösen (was anzeigt, dass GetPositionsForAddressAsync() zurückkehrt Daten nicht immer):

var gc = new Geocoder(); 
var data = await gc.GetPositionsForAddressAsync(theEnteredAdress); 
var positions = data.ToArray(); 
if (positions.Any()) { 
    var p = positions.Last(); 
    var lat = p.Latitude; 
    var lng = p.Longitude; 
    var sendInfo = await dbAPI.createInfo(lat.ToString(), lng.ToString()); 
    // continue.... 
} 
+0

Warum Dinge in Array? Wäre nicht 'var p = data.LastOrDefault();' und dann auf Null zu überprüfen, sei sauberer? – SKall

+0

@SKall - versuchen Sie es und Sie werden sehen, warum. Dies ist ein 'IEnumerable ', und 'Position' ist eine Struktur. Daher wird das Ergebnis von 'LastOrDefault()' mit 'null' immer vergeblich sein. Aber für Referenztypen, ja, ich hätte es so gemacht. –

+0

Verstanden. Normalerweise würde ich Select in diesen Fällen verwenden, aber das ist eine andere Geschichte. – SKall

2

wenn data keine Artikel hätte, würde Ihre Variablen nicht initialisiert werden. Versuchen:

double lat = 0; 
double lng = 0; 
foreach (Position p in data) 
{ 
    lat = p.Latitude; 
    lng = p.Longitude; 
} 

Diese seltsame Logik ist aber, bist du wirklich nur die Zuordnung lat und lng zum letzten Wert in data

+1

Meine Vermutung ist, dass der 'erwarten' Aufruf auch innerhalb der 'foreach' erfolgen sollte. –

+0

also brauche ich nicht die daten auszuforschen? Ich möchte nur den Wert der Benutzereingangsadresse und dann an die Datenbank senden. es scheint aber jetzt gut zu funktionieren? – medvedo

0

einfach fügen Sie diese zu Ihrer Variablen Deklaration:

Doppel lat = 0 ; doppeltes lng = 0;

Verwandte Themen