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

C#如何从指定年份列表生成每年各月1号的DateTime集合?

实现方案

用 LINQ 的 SelectMany 搭配 Enumerable.Range 可以一行实现需求,写法非常简洁:

// 直接返回 IEnumerable<DateTime>
var dateTimes = years.SelectMany(y => Enumerable.Range(1, 12).Select(m => new DateTime(y, m, 1)));

// 如果需要转成 List 就追加 ToList()
var dateTimeList = years.SelectMany(y => Enumerable.Range(1, 12).Select(m => new DateTime(y, m, 1))).ToList();

逻辑说明

  • Enumerable.Range(1, 12) 会生成 1~12 的整数序列,对应一年的12个月份
  • SelectMany 负责将每个年份对应的12个日期序列扁平化拼接,最终得到全部日期的集合,不需要手动写嵌套循环。

额外说明

你原有代码里的 int.Parse(y) 是多余的,因为输入的 years 本身就是 List<int> 类型,元素已经是整型,不需要重复做类型转换,去掉即可。

如果你用的是C# 8及以上版本,和你设想的范围语法更接近的写法也可以实现:

var dateTimes = years.SelectMany(y => (1..12).ToArray().Select(m => new DateTime(y, m, 1)));

内容的提问来源于stack exchange,提问作者jamheadart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:18:03