您如何处理以下情况:
void main() {
print(getInt('d'));
}
Map<String, int> myMap = {'a':1, 'b':2, 'c':3};
int getInt(String key) {
if (!myMap.containsKey(key)) {
myMap[key] = 0;
}
return myMap[key]!;
}
myMap[key]
永远不会为空,但如果我删除 !
的 return myMap[key]!;
,我会收到空安全错误:
'int?' 类型的值无法从函数“getInt”返回,因为它的返回类型为“int”。
用 !
丢弃可空性是否合适,还是有更简洁的方法?
答案 0 :(得分:2)
不确定更清洁是什么意思,!
确实存在是有原因的。
您可以将 if 语句简化为一行:
int getInt(String key) {
myMap[key] ??= 0;
return myMap[key]!;
}
答案 1 :(得分:0)
当您使用地图时,您无法摆脱爆炸。
这可能是一种更简洁的编码方式。
int getInt(String key) => myMap[key] ?? 0;
答案 2 :(得分:0)
来自docs:
<块引用>如果键不存在,Map 类上的 index [] 运算符将返回 null。这意味着该运算符的返回类型必须可以为空。
Map<String, int> map = {'a': 1};
int i = map['a']; // Error
解决方案:
使用 ??
并提供默认值。
int i = map['a'] ?? 0;
使用 Bang !
运算符。
int i = map['a']!;