将Variant转换为正确类型的正确方法是什么?

时间:2017-02-07 06:24:10

标签: types d type-conversion phobos

我使用返回Variant数据类型的mysql-native。我需要将其转换为标准类型,例如intstring等。

D有std.conv,但std.variant也有固结方法。

我无法理解:getcoercetoStringto(来自std.conv)之间的区别。

convertsTo返回bool听起来很奇怪。根据它的名字我期望它应该做惯例。恕我直言isConvertable更适合它。

1 个答案:

答案 0 :(得分:4)

有三种方法可以从Variant类型中获取值:

  • Variant.peek!T:如果Variant对象当前保存的值是T类型,则返回指向该值的指针。如果它持有不同类型的值,则返回null。

    Variant v = "42";
    string* ptr = v.peek!string;
    assert(ptr !is null && *ptr == "42");
    
  • Variant.get!T:如果Variant对象当前持有的值是T类型,则返回它的值。否则,抛出VariantException

    Variant v = "42";
    assertThrown!VariantException(v.get!int);
    assertNotThrown!VariantException(v.get!string);
    
  • Variant.coerce!T:返回Variant对象当前持有的值,显式转换为类型T。如果无法将值转换为T类型,则会抛出Exception

    Variant v = "42";
    string s = v.coerce!string;
    assert(s == "42");
    int i = v.coerce!int;
    assert(i == 42);