如何在强制之前检查Variant是否为null?

时间:2017-04-18 08:13:52

标签: d variant

我从Variant类型的数据库数据中获取。我需要在强制变量之前检查变量是否有任何数据。

  cargpspoint.speed = point[0].coerce!int;

如果point[0]null,我将获得例外。只有当变量具有价值时,我才需要强制执行。有很长的路要走:

if(point[0].hasValue && point[0].peek!(int) !is null)

有没有办法做得更短?或者最后如果内部为空则不抛出Exception

https://dlang.org/phobos/std_variant.html

1 个答案:

答案 0 :(得分:2)

您可以检查typeid内部是void

import std.variant : Variant;

struct CarGPSPoint
{
    int speed;
}

void main()
{
    Variant point[] = new Variant[5];

    CarGPSPoint cargpspoint;

    if ( point[0].type != typeid(void) )
        cargpspoint.speed = point[0].coerce!int;
}

或者只是抓住并放弃异常。

import std.variant : Variant, VariantException;

struct CarGPSPoint
{
    int speed;
}

void main()
{
    Variant point[] = new Variant[5];

    CarGPSPoint cargpspoint;

    try
        cargpspoint.speed = point[0].coerce!int;
    catch (VariantException e) {}
}