gpt4 book ai didi

null - 如何检查变体是否为空?

转载 作者:行者123 更新时间:2023-12-04 02:05:31 28 4
gpt4 key购买 nike

我从 DB 得到答案,需要在赋值之前检查它是否不是 null

我尝试了几种检查方式,但我的代码仍然很糟糕:

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

object.Exception@C:\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;

同样的结果。我做错了什么?

最佳答案

hasValue 检查它是否已经被初始化,并且数据库库确实初始化它,只是为了 null。

我建议直接检查类型:

 if(auto pt = point[3].peek!double)
cargpspoint.lat = *pt;

peek 检查它是否具有确切的类型,如果是,则返回指向该值的指针。这是一个精确 匹配,意味着如果它是float 或其他东西,这将不起作用,因此请确保您匹配数据库提供给您的内容(这最适合性能和准确性),但随后它将为空,因此跳过 if 它不正确,您可以设置它是否正确。

只需为所有点重复该模式即可。

关于null - 如何检查变体是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43737136/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com