【发布时间】:2021-07-13 19:35:13
【问题描述】:
我有一个程序将其输出写入日志文件到以下格式的文件夹:
Car7 Lap1 00-00-21-5290000
一切正常,但我想在每辆车最快圈速的文件名后面加上一个#。为此,我将以下 LINQ 查询放在我的汽车对象中,以作用于 Car 的 List 属性:
public List<Lap> Laps { get; set; } = new List<Lap>();
public TimeSpan FastestLap => Laps.Where(lap => lap.Number is not null and not 0).Min(lap => lap.LapTime);
我正在使用 .Where 子句,因为 laps 有时可能为 null 或 0,当我写入磁盘时,最初似乎工作正常:
Car8 Lap39 00-01-07-8900000#
但是,只有 8 辆汽车被写入磁盘,而不是 20 辆汽车的全部字段。如果我只删除上面我的属性的 .Where 部分,所有的汽车和汽车文件夹都可以正确写入,除了第 0 圈文件通常被标记为最快圈(这是有道理的,因为它们包含不完整的时间)。
我的写入磁盘方法如下所示:
foreach (var car in carList)
{
Directory.CreateDirectory(@$"{outputPath}\{logFileName}\Car{car.Number}");
foreach (var lap in car.Laps)
{
using TextWriter tw = new StreamWriter(@$"{outputPath}\{logFileName}\Car{car.Number}\Car{car.Number} Lap{lap.Number} {lap.LapTime.ToString().Replace(":", "-").Replace(".", "-")}{(lap.LapTime == car.FastestLap ? "#" : "")}.csv");
WriteCsvHeader(tw);
foreach (var telemetryRecord in lap.UniqueTelemetryRecords)
{
WriteCsvLine(tw, lap, telemetryRecord);
}
}
}
有没有办法防止这种情况发生,以便将所有汽车和汽车文件夹写入磁盘?
【问题讨论】:
-
如果
LapTime是TimeSpan,你确定它可以编译Min(lap => lap.LapTime)?