使用IEnumerable查找存在对应文件的日期时出错,求问题排查
代码中的问题及修正要点
DateTime初始化错误:第一行直接将字符串赋值给
DateTime类型变量,C#不允许这种隐式转换,必须用DateTime.Parse或DateTime.TryParse完成类型转换:DateTime testDate = DateTime.Parse("2021-05-09");重复解析与无效语法:
Select中无需重复解析testDate(它已经是DateTime类型),且@符号对非字符串变量无效,应简化为:.Select(i => testDate.AddDays(-i))不存在的
EXISTS方法:C#中判断文件是否存在需使用System.IO.File.Exists方法,同时要确保代码顶部引入using System.IO;命名空间。日期逻辑错误:
FirstOrDefault的条件中,错误地对DateTime类型的s使用AddDays(-s)(s是日期对象,不是天数数值),直接用s格式化文件路径即可,无需重新计算日期。
修正后的示例代码
using System.IO; // ... DateTime testDate = DateTime.Parse("2021-05-09"); DateTime? snapshotDate = Enumerable.Range(0, 30) .Select(i => testDate.AddDays(-i)) .FirstOrDefault(s => File.Exists(string.Format("/users/{0:yyyy/MM}/testfile_{0:yyyyMMdd}.txt", s)));
(注:将snapshotDate改为DateTime?可空类型,因为FirstOrDefault可能返回null,避免值类型无法接收null的问题)
内容的提问来源于stack exchange,提问作者novice8989
相关产品推荐
相关产品推荐

