将动态解析为 int 或回退到默认值
Parse dynamic as int or fallback to a default value
我有一张包含动态值的地图,其中之一可以是 int
、string
或 null
(即不存在的键)。
我想将此值存储在 int
变量中。我想出的解析结果非常麻烦:
Map<String, dynamic> map = {'maxposts': null}; // or 23 or '42'
// Try to parse an int value or fall back to 0
int maxposts = (map['maxposts'] is int)
? map['maxposts']
: int.tryParse(map['maxposts'] ?? '0') ?? 0;
有没有更好的方法来进行这样的 "try-fallback" 解析?
你可以把操作抽象成一个函数,比如
int intOrStringValue(dynamic o) {
if (o is String) o = int.tryParse(o);
return o ?? 0;
}
或
int intOrStringValue(dynamic o) =>
(o is String ? int.tryParse(o) : o) ?? 0;
当您不在整个逻辑中重复 map['maxposts']
表达式时,它会变得更具可读性。
我有一张包含动态值的地图,其中之一可以是 int
、string
或 null
(即不存在的键)。
我想将此值存储在 int
变量中。我想出的解析结果非常麻烦:
Map<String, dynamic> map = {'maxposts': null}; // or 23 or '42'
// Try to parse an int value or fall back to 0
int maxposts = (map['maxposts'] is int)
? map['maxposts']
: int.tryParse(map['maxposts'] ?? '0') ?? 0;
有没有更好的方法来进行这样的 "try-fallback" 解析?
你可以把操作抽象成一个函数,比如
int intOrStringValue(dynamic o) {
if (o is String) o = int.tryParse(o);
return o ?? 0;
}
或
int intOrStringValue(dynamic o) =>
(o is String ? int.tryParse(o) : o) ?? 0;
当您不在整个逻辑中重复 map['maxposts']
表达式时,它会变得更具可读性。