有没有办法将字符串转换为枚举?
enum eCommand{fred, joe, harry}
eCommand theCommand= cast(eCommand, 'joe');??
我想我只需要搜索枚举(例如循环)。
欢呼声
史蒂夫
答案 0 :(得分:3)
我想出了一个受https://pub.dev/packages/enum_to_string启发的解决方案,可以将其用作List上的简单扩展
extension EnumTransform on List {
String string<T>(T value) {
if (value == null || (isEmpty)) return null;
var occurence = singleWhere(
(enumItem) => enumItem.toString() == value.toString(),
orElse: () => null);
if (occurence == null) return null;
return occurence.toString().split('.').last;
}
T enumFromString<T>(String value) {
return firstWhere((type) => type.toString().split('.').last == value,
orElse: () => null);
}
}
用法
enum enum Color {
red,
green,
blue,
}
var colorEnum = Color.values.enumFromString('red');
var colorString: Color.values.string(Color.red)
答案 1 :(得分:2)
我遇到了同样的问题,一个小的枚举和一个字符串,所以我做到了
dynamic _enum_value = EnumFromString(MyEnum.values, string_to_enum);
dynamic EnumFromString(List values, String comp){
dynamic enumValue = null;
values.forEach((item) {
if(item.toString() == comp){
enumValue = item;
}
});
return enumValue;
}
我知道这不是最好的解决方案,但是它可行。
答案 2 :(得分:1)
对于Dart枚举,这有点麻烦。
请参阅Enum from String了解解决方案。
如果你需要的不仅仅是枚举的最基本功能,那么使用旧式枚举通常会更好 - 这是一个带有const成员的类。
有关旧式枚举的信息,请参阅How can I build an enum with Dart?
答案 3 :(得分:0)
我对枚举状态感到恼火,并建立了一个库来处理此问题:
https://pub.dev/packages/enum_to_string
基本用法:
import 'package:enum_to_string:enum_to_string.dart';
enum TestEnum { testValue1 };
main(){
final result = EnumToString.fromString(TestEnum.values, "testValue1");
// TestEnum.testValue1
}
比我想要的还要冗长,但可以完成工作。