在 Dart 中提供枚举之前,我编写了一些繁琐且难以维护的代码来模拟枚举,现在想要简化它。我需要将枚举的名称作为字符串获取,例如可以用 Java 完成但不能。
例如,当我想要的是“MONDAY”时,小测试代码片段在每种情况下都会返回“day.MONDAY”
enum day {MONDAY, TUESDAY} print( 'Today is $day.MONDAY'); print( 'Today is $day.MONDAY.toString()');
我是否更正了只需要解析字符串的“星期一”?
可悲的是, toString 方法返回是正确的"day.MONDAY",而不是更有用的"MONDAY"。你可以得到字符串的其余部分:
"day.MONDAY"
"MONDAY"
day theDay = day.MONDAY; print(theDay.toString().substring(theDay.toString().indexOf('.') + 1));
诚然,几乎不方便。
另一种将枚举名称作为字符串获取的方法是:一种较短但效率较低的方法,因为它也会为字符串的第一部分创建不必要的字符串:
theDay.toString().split('.').last
如果性能无关紧要,那可能就是我要写的,只是为了简洁。
如果要迭代所有值,可以使用day.values:
day.values
for (day theDay in day.values) { print(theDay); }