错误:参数类型“字符串?”不能分配给参数类型'String',因为'String?'可以为空,而'String'不是
美好的一天,我一直在尝试以下代码:
import 'dart:io';
main (){
print ("write your birth year:");
var birthyear = stdin.readLineSync();
var birthyearint = int.parse(birthyear);
var age = 2021-birthyearint;
print(age);
}
当我运行它时,我收到以下错误:
5:30:错误:参数类型“字符串?” 不能分配给参数类型 'String',因为 'String?' 可以为空,而 'String' 不是。varbirthyearint = int.parse(birthyear); ^
回答
该错误是由 Dart 中的 null 安全功能引起的,请参阅https://dart.dev/null-safety。
方法的结果stdin.readLineSync()是String?,即它可能是a String,也可能是null。该方法int.parse()需要一个 (非空) String。您应该检查用户是否提供了一些输入,然后您可以使用birthyear!. 更好的是,您应该使用int.tryParse()来检查用户输入是否为有效整数,例如:
var birthyearint = int.tryParse(birthyear ?? "");
if (birthyearint == null) {
print("bad year");
} else {
var age = 2021-birthyearint;
print(age);
}
THE END
二维码