私はDBから回答を得ており、それが値にする前にnull
でないかどうかを確認する必要があります。 nullのVariantをチェックする方法は?
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);
}
}
出力:
----------------------------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
あなたはそれが印刷1111: 153
です見ての通り。しかし、他のヌル変数にクラッシュする。
私も試してみました:
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;
同じ結果に。私が間違っていることは何ですか?
ちょっとハッキーな感じです。どのようにこの問題が別の言語で解決されていますか?たぶん私はバグトラッカーでそれについて言及すべきでしょうか? –
実際のデータを実際の期待と照らし合わせてチェックすることについて「ハッキー」とは何ですか? –
私は '.isNull'や他の方法のようなものを期待しています。あるいは最後に '.hasValue'は' null'でfalseを返します。それはC#のような方法で行われているようです。私が間違っているなら、私を訂正してください。 –