首页 > 解决方案 > 这个表达式可以简化吗?

问题描述

我正在从一个Room对象运行代码以将所有IRoomDwellers特定类型的内容放入一个列表中。所有IRoomDwellers都存储在一个静态的Dictionary<IRoomDweller,Room>.

但是,这基本上是我第一次使用Linq,我觉得(尽管代码似乎可以工作)该表达式相当笨拙。一方面,我真的不明白它增加了什么价值GroupBy,但没有它似乎就无法工作。

方法如下:

private List<T> GetDwellers<T>() where T : IRoomDweller {
    return RoomDwellers
        .GroupBy(z => z.Value)
        .SelectMany(z => z)
        .Where(z => z.Value == this && z.Key is T)
        .Select(z => (T) z.Key)
        .ToList();
}

GroupBy 实际上有什么功能(当我最初的尝试没有奏效时,我从一个例子中抄袭了它)?并且可以以其他方式简化/使该表达式具有更高的性能吗?

标签: c#linqdictionary

解决方案


拥有一本字典(如果您有 RoomDweller,旨在用于获取 Room)并以错误的方式使用它(您有一个 Room 并想要获取 RoomDweller)并不理想,但是:

return RoomDwellers.Where(rdkvp => rdkvp.Value == this && rdkvp.Key is T)
  .Select(rdkvp => rdkvp.Key)
  .ToList();

RoomDwellers 是 KeyValuePair 的列表,Key 是 RoomDweller,Value 是 Room.. 所以你可以枚举 KVP 的列表,选择 Value 是这个房间的那些,然后返回关联的 Key(RoomDweller)


推荐阅读