我想看看一个变量是否不是某种类型.我知道我可以做到if(picture is XFile),但这两个似乎都起到了相反的作用:

if(picture !is XFile)

if(picture is! XFile)

有什么关系呢?

推荐答案

void main() {
  var myNum = 5;

  if (myNum is! int) {
    print('myNum is an integer');
  }else{
    print('not an integer');
  }
}

输出:not an integer对于编译器,它类似于is !int

void main() {
  var myNum = null;

  if (myNum is int) {
    print('myNum is an integer');
  }else{
    print('not an integer');
  }
}

输出:not an integer,因为值是null,所以不是int.

void main() {
  var myNum = null;

  if (myNum !is int) {
    print('myNum is an integer');
  }else{
    print('not an integer');
  }
}

输出:Uncaught TypeError: Cannot read properties of null (reading 'toString')Error: TypeError: Cannot read properties of null (reading 'toString')对于编译器来说,它类似于myNum! isnull safety

这就像如果myNumnull,抛出一个error,而不判断.如果myNumnot null,则作为is工作.

CONCLUSION:

这两种方法似乎都适用于相反的情况:If(图片!是XFile)&;If(图片是!XFILE)

如果我们认为picturenot null,那么它是这样的:

if(picture is XFile)

if(picture is! XFile)

因此,他们应该为相反的方向工作

Dart相关问答推荐

程序给出不准确的值

在 Dart 中使用隔离优于异步的优势

SliverList / SliverChildBuilderDelegate 提供初始索引或允许负索引

如何在 Flutter Web 中使用 Skia/CanvasKit?

异常:在Flatter项目上没有Linux桌面项目配置错误

Flutter:如何正确实现 FlutterError.OnError

在 Dart 中将对象推入数组

如何垂直对齐行元素?

使用where在对象列表中搜索 dart 中的特定对象

如何从类中访问元数据注释?

在dart中使用动态(可变)字符串作为正则表达式模式

如何减少 ListView.builder 中 RaisedButton 的宽度?

Dart 交互/访问数据库

Dart 中 http 和 HttpClient 的区别

如何使用 Dart 和 web 以 60fps 的速度驱动动画循环?

从 Dart Map 中删除选定的键

在我的 angular-cli 元素中从 node-sass 切换到 dart sass

方法级联如何在 dart 中准确工作?

如何在 Dart 中执行相当于 setTimeout + clearTimeout 的操作?

你如何在 Dart 中打印美元符号 $