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
相关产品推荐
相关产品推荐

