我使用以下构造函数构建对象:
if(data['A'] != null) {
aObj = A.fromMap(data['A']);
}
问题在于,如果我传入的地图没有aObj的映射,它就会崩溃。我已经尝试将赋值移到大括号中并测试null:
var query = from admin in db.Admins
where admin.Email == adminLoggedIn.Email
select new { Email=admin.Email, Name=admin.Name, RoleId = admin.RoleId };
这很有效。但是我想像其他数据成员一样测试快捷方式构造函数的一部分。
这可能吗?
答案 0 :(得分:2)
三元运算符怎么样?
aObj = data['A'] ? A.fromMap(data['A']) : null;
答案 1 :(得分:2)
我认为如何以一种简洁的方式防止崩溃是这样的:
aObj = A.fromMap(data['A'] ?? Map())
当Map
为A.fromMap
时,这会向自定义data['A']
构造函数返回空 null
,之后会col
和row
null
data['A']
null
,因为Map
中的字段不存在。< / p>
答案 2 :(得分:0)
随着Dart 2.8中引入的NNBD,您可以使用:
class Foo {
final int value;
// 0 is the default value in case the expression data['key'] returns null
Foo.fromNonNullable(Map data) : value = data['key'] ?? 0;
// 0 is the default value in case `data` is `null`
Foo.fromNullable(Map? data) : value = data?['key'] ?? 0;
}