4

您如何处理以下情况:

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]永远不会为空,但如果我删除!ofreturn myMap[key]!;我会得到空安全错误:

'int?' 类型的值 无法从函数“getInt”返回,因为它的返回类型为“int”。

用 丢弃可空性是否合适!,还是有更清洁的方法?

4

3 回答 3

3

不确定清洁剂是什么意思,并且!确实存在是有原因的。

您可以将该 if 语句简化为一行:

int getInt(String key) {
  myMap[key] ??= 0;
  return myMap[key]!; 
}
于 2021-03-12T16:32:54.340 回答
2

文档

如果键不存在,则 Map 类上的 index [] 运算符返回 null。这意味着该运算符的返回类型必须可以为空。

Map<String, int> map = {'a': 1};
int i = map['a']; // Error

解决方案:

  • 使用??并提供默认值。

    int i = map['a'] ?? 0;
    
  • 使用 Bang!运算符。

    int i = map['a']!;
    
于 2021-05-23T08:12:45.303 回答
0

使用地图时,您无法摆脱爆炸。

这可能是编码相同内容的一种更简洁的方式。

int getInt(String key) => myMap[key] ?? 0;
于 2021-03-12T20:03:15.387 回答