0

所以我正在学习 dart 语言中的 SWITCH 和 CASE 语句,在课程中他解释了代码,但是当我得到一个错误时他没有得到错误。

我得到的错误:警告:空感知操作的操作数'??' 具有不包括空值的“字符串”类型。字符串``用户名=名称??“访客用户”;

我的代码是

void learnCondExpr() {
 String name = 'Yamix';
    
 String userName = name ?? "Guest User";
 print(userName);
}

我能得到一些帮助吗:)

4

3 回答 3

0

所以??操作必须放在可以为空的变量之后。但是在您的代码中,name变量 is String,不可为空。所以?? "Guest User"总是被忽略。警告是关于这一点的——这段代码没用。

PS如果您将代码修复为String? name = 'Yamix';,警告将消失。

于 2022-02-10T20:55:46.703 回答
0

问题是name不可为空的字符串。您可以nullable通过添加一个?.

像这样:

String? name = 'Yamix';

请记住,即使您的字符串可以为空但您为其分配了一个值,这将是恒定的,这就是您在检查它时可能会收到警告的原因null

左操作数不能为空,因此永远不会执行右操作数。尝试删除运算符和正确的操作数

于 2022-02-10T21:08:40.770 回答
0

默认情况下,Dart 将假定您声明的任何变量都不能为 null。您将无法分配null给变量,并且在运行时会引发错误。如果您尝试将不可为空的变量视为可能为空,它也会抱怨,这就是您对“??”所做的事情。

你可以使用?after 变量的类型来告诉 Dart 你的变量将接受空值。??允许我们处理空值而无需编写额外的代码行

简而言之,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' 可能为空。这可以防止我稍后在尝试使用可识别空值的运算符 (??) 将其分配给“x”的代码中出现错误。

我希望这有助于为您提供一些背景知识,而不仅仅是解决您的问题!:)

关于 Dart 中的 Null-aware 运算符的中短篇文章

于 2022-02-11T10:25:09.367 回答