是否可以在 Dart 中使用带有字符串(引用文本)的枚举?
Is an enum with string (quoted text) in Dart possible?
我是dart初学者,我需要在dart中实现这样一个枚举:
export enum Something {
'qwe' = 1,
'rty' = 2,
'uio' = 4,
}
我想用两种方式对值进行编码和编码,dart 中最好的结构是什么?
例如,有变量 4,我想得到 'uio',而在其他 类 中,字符串 'uio' 我想得到 4.
我知道我可以用地图做到这一点,但这个解决方案似乎不安全。
最好的结构是地图。或者两张地图,因为你想双向映射。
您正在从 String
映射到 int
,以及从 int
映射到 String
。那是两个值的映射。
它与枚举无关,枚举是同一类型的多个实例。
我相信您可以在那里找到一些“BiDirectionalMap”,但不太值得,因为您的映射不需要动态更新。
两个常量映射就可以了:
const somethingMap = {
'qwe': 1,
'rty': 2,
'uio': 4,
};
const somethingReverseMap = {
1: 'qwe',
2: 'rty',
4: 'uio',
};
int something(String code) => somethingMap[code] ??
throw ArgumentError.value(code, "code", "Not a valid code");
String somethingReverse(int value) => somethingReverseMap[value] ??
throw ArgumentError.value(value, "value", "Not a valid value");
没有比这更安全的了。您正在打开 runtime 字符串值,不允许每个字符串值,因此您不能使用类型系统。
我是dart初学者,我需要在dart中实现这样一个枚举:
export enum Something {
'qwe' = 1,
'rty' = 2,
'uio' = 4,
}
我想用两种方式对值进行编码和编码,dart 中最好的结构是什么?
例如,有变量 4,我想得到 'uio',而在其他 类 中,字符串 'uio' 我想得到 4.
我知道我可以用地图做到这一点,但这个解决方案似乎不安全。
最好的结构是地图。或者两张地图,因为你想双向映射。
您正在从 String
映射到 int
,以及从 int
映射到 String
。那是两个值的映射。
它与枚举无关,枚举是同一类型的多个实例。
我相信您可以在那里找到一些“BiDirectionalMap”,但不太值得,因为您的映射不需要动态更新。 两个常量映射就可以了:
const somethingMap = {
'qwe': 1,
'rty': 2,
'uio': 4,
};
const somethingReverseMap = {
1: 'qwe',
2: 'rty',
4: 'uio',
};
int something(String code) => somethingMap[code] ??
throw ArgumentError.value(code, "code", "Not a valid code");
String somethingReverse(int value) => somethingReverseMap[value] ??
throw ArgumentError.value(value, "value", "Not a valid value");
没有比这更安全的了。您正在打开 runtime 字符串值,不允许每个字符串值,因此您不能使用类型系统。