2017-04-18 13 views
1

Variantタイプのデータベースデータから取得しています。変数を強制する前に変数にデータがあるかどうかを確認する必要があります。Variantが強制終了する前にnullでないかどうかを確認するにはどうすればいいですか?

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

point[0]場合は、私は例外を取得しますnullになります。私は変数が価値を持っている場合にのみ強制する必要があります。長い道のりがあります:

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

短くする方法はありますか?または、内部にnullがある場合は、最後にExceptionを投げないようにしてください。

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

答えて

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) {} 
} 
関連する問題