【问题标题】:Error: The argument type 'String?' can't be assigned to the parameter type 'String' because 'String?' is nullable and 'String' isn't [duplicate]错误:参数类型“字符串?”不能分配给参数类型“字符串”,因为“字符串?”可以为空且“字符串”不是 [重复]
【发布时间】:2021-03-25 11:42:24
【问题描述】:

美好的一天, 我一直在尝试以下代码:

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' 不是。 varbirthyearint = int.parse(birthyear); ^

【问题讨论】:

    标签: dart


    【解决方案1】:

    该错误是由 Dart 中的 null 安全功能引起的,请参阅https://dart.dev/null-safety

    方法stdin.readLineSync()的结果是String?,即它可能是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);
    }
    

    【讨论】:

      【解决方案2】:

      这个错误的解决方案;只需添加:var birthyear = stdin.readLineSync();从键盘读取;还有这个错误是由 Dart 中的 null 安全特性引起的:我试过这个并成功通过。 此链接可能对您有所帮助:https://dart.dev/guides/libraries/library-tour .. . . . .

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-25
        • 1970-01-01
        • 2021-12-20
        • 2021-09-20
        • 2021-10-21
        • 2021-10-13
        • 2021-09-04
        相关资源
        最近更新 更多