所以我在学习dart语言中的SWITCH和CASE语句,在课程中他解释了代码,但他没有得到错误,而我得到了一个。
我得到的错误:警告:null感知操作"??"的操作数具有排除null的类型"String"。字符串`userName=name"访客用户";;
我的代码是
void learnCondExpr() {
String name = 'Yamix';
String userName = name ?? "Guest User";
print(userName);
}
我能得到一些帮助吗:(
Dart将假设您声明的任何变量都不能为null。您将无法将null
分配给变量,并且在运行时它将抛出一个错误。如果你试图像对待一个不可为null的变量一样对待它,它也会抱怨可能为null,这就是你对"??"所做的。
您可以在变量的类型后面使用?
来告诉Dart您的变量将接受null值。??
允许我们处理空值,而无需编写额外的代码行
简而言之,x = y ?? z
可以被描述为
如果左操作数(y(是null
,则分配右操作数z(,即
void example(String? myString) {
String? y = myString;
String z = 'spam';
var x = y ?? z;
print(x);
}
void main() {
example('hello!');
example(null);
}
// Output:
// hello!
// spam
注意到我添加了"?"在第二行的"String"之后,让Dart知道"y"可能为null。这防止了我稍后在代码中出现错误,因为我试图使用一个null感知运算符(??(将其分配给"x"。
我希望这有助于为您提供一些背景知识,而不仅仅是解决您的问题!:(
关于Dart 中的Null感知运算符的中短篇文章
因此??
操作必须放在可为null的变量之后。但在您的代码中,name
变量是String
,不能为null。所以?? "Guest User"
总是被忽略。警告是关于这一点的——这个代码是无用的。
第页。S如果将代码修复为String? name = 'Yamix';
,则警告将消失。
问题是name
不是可为null的字符串。您可以通过添加?
将其声明为nullable
类型。
像这样:
String? name = 'Yamix';
请记住,即使您的字符串可以为null,但您为其分配了一个值,它也将是常量,这就是为什么在检查null
:时可能会收到警告的原因
左操作数不能为null,因此永远不会执行右操作数。尝试删除运算符和右操作数