c# - 如何 TypeCast SelectMany 结果

标签 c# linq

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

class Space
{
    public List<Space> ContainedSpaces
    {
        get;
        set;
    }
}

class Library : Space
{
    public void AddRoom(Room room)
    {
        ContainedSpaces.Add(room);
    }
}

class Room : Space
{
}

class Test
{
    public List<Room> ListOfRooms(List<Library> libraries)
    {
         return libraries.SelectMany(lib => lib.ContainedSpaces).ToList();
    }
}

在这个例子中,我在 ListOfRooms 中的错误是:

Cannot implicitly convert type 'System.Collections.Generic.List<SoftTech.Integration.Space>' to 'System.Collections.Generic.List<SoftTech.Integration.Room>'

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

最佳答案

return libraries.SelectMany(lib => lib.ContainedSpaces).OfType<Room>().ToList();

关于c# - 如何 TypeCast SelectMany 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22965224/

相关文章:

c# - 如果方法是运算符,如何找到调用 C# 类方法的代码?

c# - 导航对象为空;为什么?

c# - LINQ 分组依据 和 "count-if"

c# - 单元测试表达式树

c# - 求和最大的平方

c# - 如何在保存到 Redis 之前压缩 JSON 数据?

c# - 在不使用 foreach 循环的 C# 中填充列表中的列表。更好的方法?

C# 电子邮件 - 新行未使用空白 : pre-wrap 呈现

LINQ 版本的 TOP PERCENT

c# - LINQ:具有多个条件的左外连接