Vala,要枚举的字符串

托马斯

有没有办法在 vala 中将字符串转换为枚举:

string foo = "Enum1";
MY_ENUM theEnum = MY_ENUM.get_value_by_name(foo);
enum MY_ENUM {
    Enum1,
    Enum2,
    Enum3
}

所以在这个例子中“theEnum”的值是:MY_ENUM.Enum1

阿尔托马斯

可以使用 GLib 的 GObject 库提供的运行时类型系统。EnumClassEnumValue这些在运行时提供自省,并允许从字符串初始化枚举。

目前语法有点复杂,虽然有人可能会修改 Vala 编译器使其更容易,但这是一项重要的工作。

一个例子:

void main () {
    try {
        MyEnum? the_enum_value;
        the_enum_value = MyEnum.parse ("FIRST");
        print (@"$(the_enum_value)\n");
    } catch (EnumError error) {
        print (@"$(error.message)\n");
    }
}

errordomain EnumError {
    UNKNOWN_VALUE
}

enum MyEnum {
    FIRST,
    SECOND,
    THIRD;

    public static MyEnum parse (string value) throws EnumError {
        EnumValue? a;
        a = ((EnumClass)typeof (MyEnum).class_ref ()).get_value_by_name ("MY_ENUM_" + value);
        if (a == null) {
            throw new EnumError.UNKNOWN_VALUE (@"String $(value) is not a valid value for $(typeof(MyEnum).name())");
        }
        return (MyEnum)a.value;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章