C# 如何键入和选择多个结果

C# 如何键入和选择多个结果,c#,linq,C#,Linq,我试图将列表展平,同时确保最终对象列表的类型正确。下面是一个(抽象)示例: 在不讨论类设计(这是一个抽象示例)的情况下,如何让SelectMany将最终列表中的每个项目类型转换为房间对象?返回库。SelectMany(lib=>lib.ContainedSpaces)。OfType().ToList(); return libraries.SelectMany(lib => lib.ContainedSpaces).OfType<Room>().ToList(); 如何让S

我试图将列表展平,同时确保最终对象列表的类型正确。下面是一个(抽象)示例:

在不讨论类设计(这是一个抽象示例)的情况下,如何让SelectMany将最终列表中的每个项目类型转换为房间对象?

返回库。SelectMany(lib=>lib.ContainedSpaces)。OfType().ToList();
return libraries.SelectMany(lib => lib.ContainedSpaces).OfType<Room>().ToList();
如何让
SelectMany
将最终列表中的每个项目键入房间对象

嗯,你不能安全地施放,因为不是每个
空间都是
房间。从技术上讲,
可以包含其他类型的
空间
s(即使您只定义了两种)

在您的设计中,这是完全合法的:

Library l = new Library();
l.ContainedSpaces = new List<Space>();
l.ContainedSpaces.Add(new Library());

@JeremyCook,你为什么不把它作为一个答案发表呢?关于无效演员阵容的正确观点;我的实际用例防止添加错误类型的项,但我不想使用于解释问题的示例过于复杂。你的最后一行是我想做的(获取房间列表)
return libraries.SelectMany(lib => lib.ContainedSpaces).OfType<Room>().ToList();
Library l = new Library();
l.ContainedSpaces = new List<Space>();
l.ContainedSpaces.Add(new Library());
libraries.SelectMany(lib => lib.ContainedSpaces).Cast<Room>().ToList();
libraries.SelectMany(lib => lib.ContainedSpaces).OfType<Room>().ToList();