Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
C# 对同一类型的集合进行分组#_C#_.net_Linq_List_Select - Fatal编程技术网

C# 对同一类型的集合进行分组#

C# 对同一类型的集合进行分组#,c#,.net,linq,list,select,C#,.net,Linq,List,Select,我有一个不同对象的集合,我想知道我是否可以创建集合来分组相同类型的对象。我不知道是否有linq之类的方法 List<Object> list = new List<Object>(); Object1 obj1 = new Object1(); Object2 obj2 = new Object2(); Object1 obj3 = new Object1(); Object3 obj4 = new Object3(); Object3 obj5 = new O

我有一个不同对象的集合,我想知道我是否可以创建集合来分组相同类型的对象。我不知道是否有linq之类的方法

List<Object> list = new List<Object>();
Object1 obj1 =  new Object1();
Object2 obj2 =  new Object2();
Object1 obj3 =  new Object1();
Object3 obj4 =  new Object3();
Object3 obj5 =  new Object3();

list.Add(obj1);
list.Add(obj2);
list.Add(obj3);
list.Add(obj4);
list.Add(obj5);
List List=新列表();
Object1 obj1=新的Object1();
Object2 obj2=新的Object2();
Object1 obj3=新的Object1();
Object3 obj4=新的Object3();
Object3 obj5=新的Object3();
列表。添加(obj1);
列表。添加(obj2);
添加列表(obj3);
添加列表(obj4);
添加列表(obj5);
我想要相同类型的新列表:

List<Object1> newList1 = method.GetAllObjectsFromListObject1 // Count = 2
List<Object2> newList2 = //GetAllObjectsFromListObject2 // Count = 1
List<Object3> newList3 = //GetAllObjectsFromListObject3 // Count = 2 
List newList1=method.GetAllObjectsFromListObject1//Count=2
List newList2=//GetAllObjectsFromListObject2//Count=1
List newList3=//GetAllObjectsFromListObject3//Count=2

LINQ可以非常轻松地返回单个集合:

var lookup = list.ToLookup(x => x.GetType());
然后你可以:

  • 对其进行迭代以查找所有类型和关联对象
  • 使用索引器获取特定类型的所有项。如果指定的类型在查找中不存在,则将返回空序列(这非常有用,而不是引发异常或返回null)
您可以使用

当然-

将按类型为您提供一组集合。

您的意思是:

var newList1 = list.OfType<Object1>().ToList();
var newList1=list.OfType().ToList();

?请注意,如果(比如)从
Object1
派生出
Object3
,则不会给出所需的计数。@JonSkeet;如果是这样的话,可以显式地查找类型并与
typeof(Object1)
进行比较。无论哪种方式,Linq都是一种方式。
var newList1 = list.Where(t=>t.GetType() == typeof(Object1)).ToList()
var newList2 = list.Where(t=>t.GetType() == typeof(Object2)).ToList()
var newList3 = list.Where(t=>t.GetType() == typeof(Object3)).ToList()
list.GroupBy(t => t.GetType());
var newList1 = list.OfType<Object1>().ToList();