在列表中与TimeSpan交互时为空序列

本文关键字:交互 列表 TimeSpan | 更新日期: 2023-09-27 18:07:00

事情是这样的。我有以下清单:

var Diffusions = new List<SetDiffusion>();

这样填充:

Diffusions.Add(new SetDiffusion 
{ 
    VideoName = videoName, 
    Selected_Dif = ConvertToTimespan(TimeParts[1]) 
});

VideoName为字符串,Selected_Dif为时间跨度。

现在有了上面说的列表,我需要得到最接近的绝对时间跨度,并用它和它相应的VideoName调用一个方法。现在这是我第一次摆弄类列表,但从我的理解,这应该工作:

UpcomingDif = Diffusions.OfType<TimeSpan>()
                        .OrderBy(t => Math.Abs((t - DateTime.Now.TimeOfDay).Ticks))
                        .First();

我已经使用它与以前的List<Timespan>没有.OfType,它工作得很好。但是现在在相同的测试环境中,它会引发一个空序列错误。

你知道我的代码有什么问题吗?

谢谢。

最后编辑:

只是以防它可能会帮助别人,这是我的定时器初始化(感谢@Koopakiller):

        var diffusion= Diffusions.OrderBy(t => Math.Abs((t.Selected_Dif - DateTime.Now.TimeOfDay).Ticks)).First();
        TimeLeft = diffusion.Selected_Dif - DateTime.Now.TimeOfDay;

在列表中与TimeSpan交互时为空序列

Diffusions不包含任何TimeSpan,这就是为什么OfType不返回列表中的任何元素。

完成任务的最简单方法是按时间戳降序排列元素,然后取第一个。

UpcomingDif = Diffusion.OrderByDescending(t => t.Selected_Dif)
                       .First()

UpcomingDif现在是SetDifusion。如果您只想要到现在的时间跨度,您可以访问Selected_Dif属性并用它减去DateTime.Now:

var timeSpan = DateTime.Now - UpcomingDif.Selected_Dif;