You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将IEnumerable<DateTimeInterval>转换为Dictionary<Guid,IEnumerable<DateTimeInterval>>

问题原因

  • ToDictionary() 方法的设计逻辑本身就是每个键对应唯一的单个值,要求源序列中不能有重复的键选择器返回值,否则运行时会直接抛出「已存在相同键」的异常。你之前的写法本质是把每个元素直接映射为值,自然得到的是Dictionary<Guid, DateTimeInterval>类型,完全不符合你要把同键元素聚合为集合的需求。
  • 你给出的DateTimeInterval类存在命名笔误:构造函数里赋值的Key是大写开头,但属性定义是小写key,实际运行会报编译错误,建议统一属性命名为大写Key,也符合C#通用命名规范。

正确实现方式

你需要先调用GroupBy()方法按Key属性对序列分组,再把分组结果转成字典:

// yourDateTimeIntervalList 为你待转换的IEnumerable<DateTimeInterval>源序列
Dictionary<Guid, IEnumerable<DateTimeInterval>> result = yourDateTimeIntervalList
    .GroupBy(x => x.key)
    .ToDictionary(g => g.Key, g => g.AsEnumerable());

如果你需要值的类型是可增删改的List而非只读的IEnumerable,也可以调整写法:

Dictionary<Guid, List<DateTimeInterval>> result = yourDateTimeIntervalList
    .GroupBy(x => x.key)
    .ToDictionary(g => g.Key, g => g.ToList());

如果你使用的是.NET 6及以上版本,也可以直接用ToLookup()方法,它本身就实现了类似IReadOnlyDictionary<TKey, IEnumerable<TElement>>的结构,不需要手动转字典也能满足按键索引取同键集合的需求:

var lookup = yourDateTimeIntervalList.ToLookup(x => x.key);
// 直接通过lookup[指定的Guid值] 就能拿到对应Key的所有DateTimeInterval集合

内容的提问来源于stack exchange,提问作者I am not Fat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:36:01