【发布时间】:2021-06-23 07:28:26
【问题描述】:
我正在从 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 实际提供什么功能(当我最初的尝试没有奏效时,我从一个示例中抄袭了它)?这个表达式能否以其他方式简化/提高性能?
【问题讨论】:
-
.SelectMany(z => z)是多余的 - 它在这里没有任何作用。 -
我同意
GroupBy似乎毫无意义,因为它与SelectMany相抵消。当您删除GroupBy和SelectMany时,什么“不起作用”? -
GroupBy后跟SelectMany看起来确实很奇怪。它有效地按Value对列表进行“排序”。我想您可以将其简化为RoomDwellers.Where(z => z.Value == this).Select(z => z.Key).OfType<T>().ToList();,但结果的排序方式会有所不同。 -
@phuzi 我想,但没有它代码将无法工作。如果没有,我无法在 Where 中分离出键/值对。
-
“无法分离出键/值对”是什么意思?您收到错误消息吗?您是否得到与预期输出不同的东西?如果有,您的预期产出和实际产出是多少?
标签: c# linq dictionary