Ich bekomme Antwort von DB und muss prüfen, ob es nicht null
ist, bevor es auf Wert gesetzt wird.Wie man Variante für Null prüft?
Ich habe versucht, einige Varianten der Überprüfung, aber mein Code zerquetschen noch:
foreach(i, point;myPointsLonLat)
{
try
{
carGPSPoint cargpspoint;
cargpspoint.id = point[0].coerce!ulong;
cargpspoint.recordDate = DateTime.fromSimpleString(point[1].coerce!string).toISOExtString(); // some magic to get string in 2016-10-31T15:37:24 format
if(point[2].hasValue) //check if we have some data
cargpspoint.velocity = point[2].coerce!double;
if(point[3].hasValue)
cargpspoint.lat = point[3].coerce!double;
if(point[4].hasValue)
cargpspoint.lon = point[4].coerce!double;
cargpspoints[i] = cargpspoint;
b.next();
}
catch(Exception e)
{
writeln("\n----------------------------ERRRRRR-----------------------");
writeln(point);
writeln("1111: ", point[2].coerce!double);
writeln("2222: ", point[3].coerce!double);
writeln("3333: ", point[4].coerce!double);
writeln(e.msg);
}
}
Ausgang:
----------------------------ERRRRRR-----------------------
Row([1478698195002489886, 2016-Nov-09 13:29:55, 153, null, null], [false, false, false, true, true])
1111: 153
[email protected]:\D\dmd2\windows\bin\..\..\src\phobos\std\variant.d(823): Type typeof(null) does not convert to double
Wie Sie es drucken 1111: 153
sehen. Aber Absturz auf andere Null-Variablen.
ich auch versucht:
if(point[2].type !is null) //check if we have some data
cargpspoint.velocity = point[2].coerce!double;
if(point[3].type !is null)
cargpspoint.lat = point[3].coerce!double;
if(point[4].type !is null)
cargpspoint.lon = point[4].coerce!double;
gleiches Ergebnis. Was mache ich falsch?
Es sieht aus wie ein bisschen hacky. Wie löst dieses Problem in anderen Sprachen? Vielleicht sollte ich das im Bug-Tracker erwähnen? –
Was ist "hacky" über die Überprüfung der tatsächlichen Daten im Vergleich zu Ihren tatsächlichen Erwartungen? –
Ich erwarte etwas wie '.isNull' oder andere Methoden. Oder zumindest, dass '.hasValue 'false auf' null 'zurückgibt. Es scheint, dass es in C# so gemacht wird. Korrigiere mich, wenn ich falsch liege. –