分组相同类型的集合C#

Max*_*mus 8 .net c# linq select list

我有一组不同的对象,我想知道我是否可以创建分组相同类型对象的集合.我不知道是否有一个方法与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);
Run Code Online (Sandbox Code Playgroud)

我想要相同类型的新列表:

List<Object1> newList1 = method.GetAllObjectsFromListObject1 // Count = 2
List<Object2> newList2 = //GetAllObjectsFromListObject2 // Count = 1
List<Object3> newList3 = //GetAllObjectsFromListObject3 // Count = 2 
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 18

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

var lookup = list.ToLookup(x => x.GetType());
Run Code Online (Sandbox Code Playgroud)

然后你可以:

  • 迭代它以查找所有类型和相关对象
  • 使用索引器获取特定类型的所有项目.如果指定查找中不存在的类型,则返回一个空序列(这非常有用,而不是抛出异常或返回null).


D S*_*ley 5

当然 -

list.GroupBy(t => t.GetType());
Run Code Online (Sandbox Code Playgroud)

将按类型为您提供集合的集合.