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
相关产品推荐
相关产品推荐

