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

如何从数组中获取晚于当前时间的最近时间及代码错误排查

问题分析

错误CS1061的原因很明确:你在LINQ查询中错误地尝试访问x.busTimes,但x本身就是busTimes集合中的DateTime对象——每个x都是一个具体的时间实例,它根本没有名为busTimes的属性,这就导致了编译错误。

修正后的代码

这里我帮你修正了代码,同时增加了边界情况的处理(比如当前时间晚于所有公交班次时的逻辑):

var busTimes = new string[] { "15:00", "16:00", "17:00", "18:00", "19:00", "20:00", "21:00" }
    .Select(x => DateTime.Parse(x))
    .ToList();

var now = DateTime.Now.TimeOfDay;

// 修正后的LINQ查询:直接使用x.TimeOfDay比较和排序
var closestTime = busTimes
    .Where(x => x.TimeOfDay > now)
    .OrderBy(x => x.TimeOfDay)
    .FirstOrDefault();

// 处理无匹配结果的情况
if (closestTime != null)
{
    Console.WriteLine($"最近的晚于当前时间的公交班次:{closestTime:HH:mm}");
}
else
{
    // 这里可以根据需求调整逻辑,比如返回次日最早班次
    Console.WriteLine("当前时间已晚于所有公交班次,暂无后续班次");
}
关键修改点
  • 修复语法错误:把查询中的x.busTimes.TimeOfDay改成x.TimeOfDay,因为x就是集合里的每个DateTime元素,直接访问它的TimeOfDay属性即可。
  • 提升健壮性:用FirstOrDefault()替代First()——如果当前时间晚于所有公交时间,First()会抛出InvalidOperationException,而FirstOrDefault()会返回null,方便我们优雅处理这种边界情况。
  • (可选)如果你习惯用LINQ查询语法,修正后的写法是:
    var closestTime = (from x in busTimes 
                       where x.TimeOfDay > now 
                       orderby x.TimeOfDay ascending 
                       select x).FirstOrDefault();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:38:24