You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vala语言中如何实现字符串到enum枚举类型的转换?

Vala中将字符串转换为枚举类型的实现方案

Vala原生支持字符串到枚举类型的转换,不需要额外引入第三方依赖,以下是具体实现方式:

基础场景实现

首先是你给出的枚举定义:

enum MY_ENUM {
    Enum1,
    Enum2,
    Enum3
}

你示例中调用的get_value_by_name并非Vala枚举的原生方法,正确的转换可以使用GLib.Enum.parse通用方法实现,代码示例如下:

string foo = "Enum1";
try {
    MY_ENUM theEnum = (MY_ENUM) Enum.parse(typeof(MY_ENUM), foo);
    // 转换完成后theEnum的取值即为MY_ENUM.Enum1
    print("转换结果:%s\n", theEnum.get_name()); // 输出Enum1
} catch (ConvertError e) {
    // 当输入字符串无匹配的枚举值时会触发该异常,可在此处加降级逻辑
    print("转换失败:%s\n", e.message);
}

无异常版本的简化实现

如果不想处理异常,希望字符串匹配失败时直接返回默认枚举值,可以自行封装辅助方法:

MY_ENUM my_enum_from_string(string input, MY_ENUM default_val = MY_ENUM.Enum1) {
    foreach (var enum_entry in Enum.get_values(typeof(MY_ENUM))) {
        if (enum_entry.get_name() == input) {
            return (MY_ENUM) enum_entry;
        }
    }
    return default_val;
}

// 调用示例
string foo = "Enum1";
MY_ENUM theEnum = my_enum_from_string(foo);

注意事项

  • 枚举名称的匹配为大小写敏感,如果需要支持大小写不敏感的匹配,只需要在对比时将输入字符串和枚举名称统一转为大写/小写再判断即可。
  • 上述方法同样适用于标记了[Flags]的位枚举类型。

内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:15:03