Dart类型转换动态扩展

4

我想知道是否可能编写一个扩展函数将动态类型转换为我选择的类的类型,这样我就可以在我的集成开发环境中获得字段建议。

我尝试了类似于以下内容的东西:

extension DynamicCasting on dynamic {
  T as<T>() => this is T ? this as T : null;
}

但是当我使用它时
class User {
  final String name;

  User(this.name);
}

...

foo[i].as<User>().

它仍然将其视为动态内容,名称字段没有被建议。

它是否会产生任何运行时错误?我认为这是因为该功能非常新,IntelliSense还没有跟上它的步伐。 - Ryosuke
它实际上确实会产生TypeError。 - leedwon
1个回答

2

看起来在dartpad中可以工作。我可以看到以下片段中使用了String类的预期成员:.as<String>()。因此,这似乎是您的IDE和/或项目设置的问题。

void main() {
  print(1.as<String>().);
}

extension DynamicCasting on dynamic {
  T as<T>() => this is T ? this as T : null;
}

请问您能否提供您的代码?因为在我的环境中它会产生 TypeError 错误。 - leedwon
如果您正在使用空安全(null safety),那么上述代码需要进行修复。T? as<T>() => this is T ? this as T : null; - Nullable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接