我怎样才能看到最接近一个的时间是我的列表?

时间:2013-08-27 17:00:48

标签: c# .net datetime

我正在为我的手机开发一个应用程序,您可以在其中查看使用列表框输入时间的总线时间,然后检查列表,然后向您显示最接近它的时间或完全匹配。我已经尝试过自己并且运气好了我在这里发现的一些代码,但我仍然无法让它工作。

这里

    public  MainPage()
    {
        InitializeComponent();

        List<string> thedates = new List<string>();



        thedates.Add("0130");
        thedates.Add("0230");
        thedates.Add("0330");
        thedates.Add("0430");
        thedates.Add("0530");


        DateTime fileDate, closestDate;


        int min = int.MaxValue;

        foreach (DateTime date in theDates)
            if (Math.Abs(date.Ticks - fileDate.Ticks) < min)
            {
                min = date.Ticks - fileDate.Ticks;
                closestDate = date;
            }
    }

错误: “theDates”这个名称在当前上下文中不存在。

对不起,如果这是简单或复杂的事情。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:5)

改变'theDates' 在

foreach (DateTime date in theDates)

到'thedates'。

如上所述 - 您也没有使用正确的对象。您应该只创建一个DateTime对象列表而不是字符串。

List<DateTime> thedates = new List<DateTime>();

thedates.Add(new DateTime{ // Set up values here });
..
..

答案 1 :(得分:2)

这是一个非常基本的错误,应该几乎可以在互联网上的任何地方找到,问题是您正在使用名为foreach的{​​{1}}中的list循环进行搜索你的申请中存在。

您在应用程序顶部声明了theDateslist,并希望使用thedates,您可以将theDates重命名为thedates或仅在你的foreach循环中将theDates更改为theDates

您还应该将thedates更改为List<string>

List<DateTime>将填写如下:

list<DateTime>

请记住:c#是区分大小写的语言。

答案 2 :(得分:2)

  1. 您正在创建一个列表“thedates”,而foreach正在处理“theDates”,变量区分大小写
  2. 更改两者中的任何一个后,仍然会出现问题,因为你的thedates容器是一个字符串列表,而你的foreach循环期望一个包含Datetime Objects的容器

答案 3 :(得分:1)

我认为最干净的方法是进行简单的LINQ查询。我只是将你的ticks数学移动到select语句中,然后调用Min()来获取结果集中的最小元素。

  closetDate = myDates.Select(Math.Abs(x => x.Ticks - fileDate.Ticks)).Min()