为什么我会收到此错误警告:识别空的操作数'??'的操作数具有排除 null 的类型 'String'。飞镖语言



所以我在学习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,因此永远不会执行右操作数。尝试删除运算符和右操作数

相关内容

最新更新