c# – 在列表上使用FindAll>类型

c# – 在列表上使用FindAll>类型,第1张

概述假设 public class MyClass{ public int ID {get; set; } public string Name {get; set; }} 和 List<MyClass> classList = //populate with MyClass instances of various IDs 我可以 List<MyClass> result = cla 假设

public class MyClass{   public int ID {get; set; }   public string name {get; set; }}

List<MyClass> classList = //populate with MyClass instances of varIoUs IDs

我可以

List<MyClass> result = classList.FindAll(class => class.ID == 123);

这将给我一个ID = 123的类的列表.效果很好,看起来很优雅.

现在,如果我有

List<List<MyClass>> listofClassLists = //populate with Lists of MyClass instances

如何获得筛选列表本身被过滤的筛选列表.我试过了

List<List<MyClass>> result = listofClassLists.FindAll                      (List => List.FindAll(class => class.ID == 123).Count > 0);

它看起来很优雅,但不起作用.它只包括类的列表,其中至少有一个类的ID为123,但它包含该列表中的所有MyClass实例,而不仅仅是匹配的实例.

我最终不得不这样做

List<List<MyClass>> result = Results(listofClassLists,123);private List<List<MyClass>> Results(List<List<MyClass>> mylistofLists,int ID){   List<List<MyClass>> results = new List<List<MyClass>>();   foreach (List<MyClass> myClassList in mylistofLists)   {      List<MyClass> subList = myClassList.FindAll(myClass => myClass.ID == ID);      if (subList.Count > 0)         results.Add(subList);   }   return results;}

完成工作,但不是那么优雅.只是寻找更好的方法在列表列表上进行FindAll.

解决方法 要保留列表列表,您可以执行以下示例:

MyClass a = new MyClass() { ID = 123,name = "Apple" };MyClass b = new MyClass() { ID = 456,name = "Banana" };MyClass c = new MyClass() { ID = 789,name = "Cherry" };MyClass d = new MyClass() { ID = 123,name = "Alpha" };MyClass e = new MyClass() { ID = 456,name = "Bravo" };List<List<MyClass>> Lists = new List<List<MyClass>>(){    new List<MyClass>() { a,b,c },new List<MyClass>() { d,e },new List<MyClass>() { b,c,e}};var query = Lists            .Select(List => List.Where(item => item.ID == 123).ToList())            .Where(List => List.Count > 0).ToList();

查询将是List< List< MyClass>>保存通过测试的MyClass对象列表.乍一看,它看起来乱序,其中Where扩展位于Select之后,但内部列表的转换需要先发生,这就是Select扩展中发生的情况.然后由Where过滤.

总结

以上是内存溢出为你收集整理的c# – 在列表上使用FindAll>类型全部内容,希望文章能够帮你解决c# – 在列表上使用FindAll>类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1215916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存