在Dart中使用'as'进行类型转换

时间:2018-09-25 09:13:14

标签: dart

为什么在传递Foo的实例而不是将D2设置为d1时会在{​​{1}}中中断?在.NET中,建议使用null而不是as,因为is通常需要 two 强制转换/转换,这比is测试更昂贵。

null

1 个答案:

答案 0 :(得分:3)

因为如果对象不是右侧类型(或as)的实例,则Dart中的null运算符将引发。 与C#中的as运算符相似,后者的计算结果为null而不是抛出。

您的代码以var d1 = d1OrD2 as D1;开头,当d1OrD2D2实例时,该操作将抛出。

您应该做的是:

void Foo(Base d1OrD2) {
  if (d1OrD2 is D1) {
    // Static type of d1OrD2 is D1 here, you can call D1 methods on it.
    print("it's d1");
  } else {
    var d2 = d1OrD2 as D2;
    print("it's d2");
  }
}