Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 省道列表-子类型上的过滤器_Dart - Fatal编程技术网

Dart 省道列表-子类型上的过滤器

Dart 省道列表-子类型上的过滤器,dart,Dart,在我的dart项目中,构造经常出现在许多上下文中。对于具有类型且具有子类型的列表,此代码将子类型过滤到新列表: class A { } class AChild extends A { } List<A> alist = [new A(), new AChild()]; List<AChild> aclist = alist.where((final A a) => a is AChild). map(

在我的dart项目中,构造经常出现在许多上下文中。对于具有类型且具有子类型的列表,此代码将子类型过滤到新列表:

class A {
}

class AChild extends A {  
}

List<A> alist = [new A(), new AChild()];
List<AChild> aclist = alist.where((final A a) => a is AChild).
                            map((final A a) => a as AChild).toList();
A类{
}
类AChild扩展了{
}
列表列表=[new A(),new AChild()];
列表aclist=alist.where((最终A)=>A是AChild)。
map((最后一个A)=>A作为AChild.toList();

没什么大不了的,一切正常。所以我只是想找一些波兰人。可以用一个函数或更紧凑的东西来代替它吗?已经尝试用列表和泛型类型编写函数,但不要得到<>代码> 接受此。

< P>不确定是否会考虑此短。如果您经常使用此模式,可能是:

class CheckType<T> {
  bool isT(dynamic v) => v is T;

  T as(dynamic v) => v as T;
}

main() {
  final ct = new CheckType<AChild>();
  List<A> alist = [new A(), new AChild()];
  List<AChild> aclist = new List<AChild>.from(alist.where(ct.isT).(ct.as));
}
类检查类型{
bool-isT(动态v)=>v是T;
T as(动态v)=>v as T;
}
main(){

final ct=new CheckType

基于Günter的提示,使用工具类代替函数。如果经常出现,则过滤器类可以作为常量放在项目中,这很好。获得以下信息:

class A {}

class AChild extends A {}

class TypeFilter<T, Z>{

  const TypeFilter();

  List<T> list(List<Z> lz){
    return lz.where((final Z z) => z is T)
        .map((final Z z) => z as T).toList();
  }
}

main(List<String> args) {
  const TypeFilter filterAChild = const TypeFilter<AChild, A>();

  List<A> alist = [new A(), new AChild()];
  List<AChild> aclist = filterAChild.list(alist);
  print(aclist);
}
class A{}
类AChild扩展了{}
类类型过滤器{
常量TypeFilter();
列表(列表lz){
返回lz,其中((最终Z)=>Z是T)
.map((最终Z)=>Z作为T.toList();
}
}
主(列表参数){
const-TypeFilter-filterAChild=const-TypeFilter();
列表列表=[new A(),new AChild()];
List aclist=filterAChild.List(列表);
打印(aclist);
}

使用
CheckType
很酷,也许我会使用这种风格,谢谢。尝试用函数包装,但它保持了原始列表的类型。函数的泛型类型参数在运行时还不可用。恐怕这将在以后计划。