小编典典

Dart 如何将枚举的名称作为字符串获取

all

在 Dart 中提供枚举之前,我编写了一些繁琐且难以维护的代码来模拟枚举,现在想要简化它。我需要将枚举的名称作为字符串获取,例如可以用 Java
完成但不能。

例如,当我想要的是“MONDAY”时,小测试代码片段在每种情况下都会返回“day.MONDAY”

enum day {MONDAY, TUESDAY}
print( 'Today is $day.MONDAY');
print( 'Today is $day.MONDAY.toString()');

我是否更正了只需要解析字符串的“星期一”?


阅读 83

收藏
2022-08-21

共1个答案

小编典典

可悲的是, toString 方法返回是正确的"day.MONDAY",而不是更有用的"MONDAY"。你可以得到字符串的其余部分:

day theDay = day.MONDAY;      
print(theDay.toString().substring(theDay.toString().indexOf('.') + 1));

诚然,几乎不方便。

另一种将枚举名称作为字符串获取的方法是:一种较短但效率较低的方法,因为它也会为字符串的第一部分创建不必要的字符串:

theDay.toString().split('.').last

如果性能无关紧要,那可能就是我要写的,只是为了简洁。

如果要迭代所有值,可以使用day.values

for (day theDay in day.values) {
  print(theDay);
}
2022-08-21