有什么方法可以创建以枚举为键的 Map 以确保 operator[] 不为空?
Is there any way to create Map with enum as key that ensure operator[] is not null?
enum SomeEnum { first, second }
Map<SomeEnum, String(or any type)> someMap = {
SomeEnum.first: 'first',
SomeEnum.second: 'second',
};
String variable = someMap[SomeEnum.first]; <- nullable
在上面的代码中,someMap[SomeEnum.{anything}]
肯定不能为空,因为它有所有可能的 SomeEnum 作为键。
但这会导致错误,因为 someMap[SomeEnum.first]
可以为空,无法分配给类型 String
我如何告诉 flutter 这有所有可能的枚举值,并且 100% 不能为空而不使用 !
(我不想使用它,因为我经常使用这个地图和这个有点烦人)
如果那是您的文字枚举和地图,则您不需要该地图。使用 SomeEnum.first.name
获取字符串。
如果字符串不同。我会使用不同的方法。使用 Dart 2.17.0 或更高版本时,您可以使用增强型枚举和简单的向枚举添加方法,例如
enum SomeEnum { first, second;
String getString() {
switch (this) {
case SomeEnum.first: return "first string";
case SomeEnum.second: return "second string";
}
}
int toInt() {
switch (this) {
case SomeEnum.first: return 1;
case SomeEnum.second: return 2;
}
}
}
然后在需要的地方使用Some.first.getString()
。或者 Some.first.toInt()
得到整数
对于较低的 Dart 版本,您可以编写扩展并以相同的方式使用它:
extension SomeEnumExtension on SomeEnum {
String getString() {
switch (this) {
case SomeEnum.first: return "first string";
case SomeEnum.second: return "second string";
}
}
}
enum SomeEnum { first, second }
Map<SomeEnum, String(or any type)> someMap = {
SomeEnum.first: 'first',
SomeEnum.second: 'second',
};
String variable = someMap[SomeEnum.first]; <- nullable
在上面的代码中,someMap[SomeEnum.{anything}]
肯定不能为空,因为它有所有可能的 SomeEnum 作为键。
但这会导致错误,因为 someMap[SomeEnum.first]
可以为空,无法分配给类型 String
我如何告诉 flutter 这有所有可能的枚举值,并且 100% 不能为空而不使用 !
(我不想使用它,因为我经常使用这个地图和这个有点烦人)
如果那是您的文字枚举和地图,则您不需要该地图。使用 SomeEnum.first.name
获取字符串。
如果字符串不同。我会使用不同的方法。使用 Dart 2.17.0 或更高版本时,您可以使用增强型枚举和简单的向枚举添加方法,例如
enum SomeEnum { first, second;
String getString() {
switch (this) {
case SomeEnum.first: return "first string";
case SomeEnum.second: return "second string";
}
}
int toInt() {
switch (this) {
case SomeEnum.first: return 1;
case SomeEnum.second: return 2;
}
}
}
然后在需要的地方使用Some.first.getString()
。或者 Some.first.toInt()
得到整数
对于较低的 Dart 版本,您可以编写扩展并以相同的方式使用它:
extension SomeEnumExtension on SomeEnum {
String getString() {
switch (this) {
case SomeEnum.first: return "first string";
case SomeEnum.second: return "second string";
}
}
}