【问题标题】:What is the right way to convert Variant to proper type?将 Variant 转换为正确类型的正确方法是什么?
【发布时间】:2017-02-07 06:24:10
【问题描述】:

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

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

我不明白:getcoercetoStringto(来自 std.conv)之间有什么区别。

convertsTo 是返回 bool 听起来也很奇怪。按它的名字,我希望它应该做约定。恕我直言isConvertable 是更恰当的名称。

【问题讨论】:

    标签: types d type-conversion phobos


    【解决方案1】:

    有三种方法可以从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);
      

    【讨论】:

    • 你能添加现实生活中的例子吗?据我了解,如果变量可以显式转换为正确的数据类型,主要问题是什么?
    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多