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

What is the right way to convert Variant to proper type?

我用mysql-native那个returnVariant数据类型。我需要将其转换为标准类型,如 intstring

D有std.conv,但是std.variant也有具体化的方法

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

而且convertsTo是returnbool听起来也很奇怪。根据它的名字,我预计它应该符合惯例。恕我直言 isConvertable 是更合适的名称。

可以通过三种方式从 Variant 类型中获取值:

  • Variant.peek!T:如果Variant对象当前持有的值是T类型,那么指向该值的指针是return编辑。如果它持有不同类型的值,则它 return 为 null。

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

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

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