我的分数是dynamic x,我想把x赋给T sIF x is T,否则把null赋给s.具体地说,我希望避免两次键入x,并避免创建临时.(例如,我不想一遍又一遍地写String s = map['key'] is String ? map['key'] : null;,因为我会有很多这样的表达式.)我不希望出现任何运行时错误的可能性.

以下是工作原理:

class Cast<T> {
  T f(x) {
    if (x is T) {
      return x;
    } else {
      return null;
    }
  }
}

// ...

dynamic x = something();
String s = Cast<String>().f(x);

有没有语法上更好的方法?

推荐答案

DART 2具有通用功能,允许

T? cast<T>(x) => x is T ? x : null;
dynamic x = something();
String s = cast<String>(x);

你也可以使用

var /* or final */ s = cast<String>(x);

并得到s的推算结果为String

Dart相关问答推荐

有什么区别!并且 ! 在 Dart 中?

日期时间时区反序列化

如何从 Polymer Dart 触发自定义事件?

如何从 Dart 中的映射中过滤空值

如何在 Dart 中等待单元测试中的异步设置?

Flatter中的Sqlite,数据库assets如何工作

使用brave浏览器调试flutter web app

Dart:Streams与 ValueNotifiers

如何创建一个对话框,能够接受文本输入并在Flutter中显示结果?

有没有更好的方法来解析 Dart 中的 int

Flutter-键盘显示和隐藏导致生成调用

Flutter/Dart Uri 没有在 URL 中转义冒号:

Flutter DataTable - 点击行

可选参数的默认值

将函数/方法分配给 Dart 中的变量

如何判断switch/case中对象的类型?

Dart 会支持服务器端开发吗?

如何在 Dart 中扩展列表?

是否可以在 Dart 中的一行上初始化列表?

在 Dart 中获取集合/列表中数字总和的最简洁方法是什么?