Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修剪一天中的时间列表以删除过去的时间_C#_Wpf - Fatal编程技术网

C# 修剪一天中的时间列表以删除过去的时间

C# 修剪一天中的时间列表以删除过去的时间,c#,wpf,C#,Wpf,在C#/WPF应用程序中,我有一个类型字符串列表,它是组合框的ItemsSource。此列表包含用户日历上当前一天(从上午8点到下午5点)的半小时空闲时间段。图为: 我想调整列表,以便不显示过去的时间(例如,如果现在是上午10点,不要显示上午8点到10点之间的时间段)。我如何才能最好地完成这一点 更新:字符串列表由“startTime”+“-”+“endTime”组成,因此列表中的每个条目如下所示: 6/10/2014 8:00:00 AM - 6/10/2014 8:30:00 AM 6/1

在C#/WPF应用程序中,我有一个类型字符串列表,它是组合框的ItemsSource。此列表包含用户日历上当前一天(从上午8点到下午5点)的半小时空闲时间段。图为:

我想调整列表,以便不显示过去的时间(例如,如果现在是上午10点,不要显示上午8点到10点之间的时间段)。我如何才能最好地完成这一点

更新:字符串列表由“startTime”+“-”+“endTime”组成,因此列表中的每个条目如下所示:

6/10/2014 8:00:00 AM - 6/10/2014 8:30:00 AM
6/10/2014 8:30:00 AM - 6/10/2014 9:00:00 AM
etc...

我通过使用一些lambda表达式来解决这个问题。 假设您的时间列表被称为:

times
然后使用where子句,我们可以使用以下命令获得此后的所有时间:

List<string> ordered = times.Where(o => DateTime.Parse(o.Split('-')[1]) > DateTime.Now).ToList();
List ordered=times.Where(o=>DateTime.Parse(o.Split('-')[1])>DateTime.Now.ToList();

这基本上将“时间”列表中的每个元素解析为日期时间类型,然后查看它是否在当前日期时间之后。

使用
LinQ
通常是筛选集合的最简单方法。显然,如果你坚持使用
string
值,这将变得更加困难,因此我将从不同的角度来看待这一点——每两个小时重新创建一次集合。在这种情况下,过滤是不必要的。。。试着这样做:

List<DateTime> validDates = new List<DateTime>();
DateTime startTime = DateTime.Now.Date;
for (int index = 0; index < 48; index++)
{
    if (startTime > DateTime.Now)
    {
        validDates.Add(startTime);
    }
    startTime = startTime.AddMinutes(30);
}
List validDates=new List();
DateTime startTime=DateTime.Now.Date;
对于(int-index=0;index<48;index++)
{
如果(startTime>DateTime.Now)
{
有效期。添加(开始时间);
}
startTime=startTime.AddMinutes(30);
}

如何从这些有效的
DateTime
实例填充
string
值取决于您自己。

根据您的实现,有几种不同的方法。你试过什么了吗?你能给我们一个你的<代码>列表的样本吗?我已经更新了我的问题,加入了关于列表的更多细节。可能的重复非常巧妙,几乎是完美的,但是,因为它在“-”的两边评估DateTime对象它仍然返回一些无法使用的时间。例如,如果是上午9:15,您仍然会看到一个项目,指示您在9:00-9:30之间有空,因为9:30不是过去的时间。要解决这个问题,您只需要在连字符的左边计算时间。如何重新编写表达式来执行此操作?您可以将
o.Split('-')[1]
更改为
o.Split('-')[0]
来计算左手时间