过滤arraylist内容的最佳方法是什么?

PIC*_*ain 4 c# lambda arraylist filter

假设我有USBDevice对象的ArrayList.每个USBDevice都有ProductID和VendorID属性(以及其他).我想创建另一个ArrayList,它是第一个只包含与特定VID匹配的USBDevice的子集.这样做的最短路径是什么?我还没有尝试过这个,但lambda表达式可以这样使用......

ArrayList CompleteList = new ArrayList();
...
// Fill CompleteList with all attached devices....
...
ArrayList SubSetList = CompleteList.Where(d => d.VID == "10C4")
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

你需要一个演员.编译器对ArrayLists的唯一了解是它们包含对象.它不知道里面对象的类型,所以你必须告诉它.

ArrayList subSetList = new ArrayList(CompleteList.Cast<USBDevice>()
                                                 .Where(d => d.VID == "10C4")
                                                 .ToList());
Run Code Online (Sandbox Code Playgroud)

但这似乎毫无意义.为什么ArrayList在同一个项目中使用旧类和LINQ?您应该尝试开始List<T>System.Collections.Generic命名空间中使用该类,然后您的where表达式将在没有任何强制转换的情况下工作,就像您想要的那样.