Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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#_.net_Datetime - Fatal编程技术网

C# 我怎样才能知道什么时间最接近我的名单?

C# 我怎样才能知道什么时间最接近我的名单?,c#,.net,datetime,C#,.net,Datetime,我正在为我的手机开发一个应用程序,你可以看到公交车时间。你用列表框输入一个时间,然后它检查列表,然后向你显示最接近它的时间或精确匹配的时间。我自己也尝试过,在这里找到了一些代码,但我仍然无法让它正常工作 这里 public主页() { 初始化组件(); 列出日期=新列表(); 添加(“0130”); 添加(“0230”); 添加(“0330”); 添加(“0430”); 日期。添加(“0530”); DateTime fileDate,closestDate; int min=int.MaxVa

我正在为我的手机开发一个应用程序,你可以看到公交车时间。你用列表框输入一个时间,然后它检查列表,然后向你显示最接近它的时间或精确匹配的时间。我自己也尝试过,在这里找到了一些代码,但我仍然无法让它正常工作

这里

public主页()
{
初始化组件();
列出日期=新列表();
添加(“0130”);
添加(“0230”);
添加(“0330”);
添加(“0430”);
日期。添加(“0530”);
DateTime fileDate,closestDate;
int min=int.MaxValue;
foreach(日期时间日期,以日期为单位)
if(Math.Abs(date.Ticks-fileDate.Ticks)
错误: 当前上下文中不存在名称“theDates”

抱歉,如果这是简单或复杂的事情。感谢您的帮助。

更改日期 在

到“thedates”

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

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

thedates.Add(new DateTime{ // Set up values here });
..
..
列出日期=新列表();
Add(新的日期时间{//在此设置值});
..
..

这是一个非常基本的错误,应该在internet上的任何地方都可以找到,问题是您正在使用
foreach
循环在一个名为
日期的
列表中搜索,该列表在您的应用程序中不存在

您在应用程序顶部声明了
列表
日期
,如果您想使用
日期
,您可以将
日期
重命名为
日期
,或者在foreach循环中将
日期
更改为
日期

您还应该将
列表
更改为
列表

列表将按如下方式填写:

theDates.Add(today.AddHours(13).AddMinutes(30));
theDates.Add(today.AddHours(14).AddMinutes(30));
theDates.Add(today.AddHours(15).AddMinutes(30));
theDates.Add(today.AddHours(16).AddMinutes(30));
theDates.Add(today.AddHours(17).AddMinutes(30));
记住:c#是一种区分大小写的语言

  • 您正在创建一个列表“thedates”,在foreach中,变量区分大小写
  • 在您更改这两者中的任何一个之后,仍然会出现问题,因为您的thedates容器是一个字符串列表,并且您的foreach循环需要一个包含Datetime对象的容器

  • 我认为最干净的方法是执行一个简单的LINQ查询。我只是将您的ticks数学移到select语句中,然后调用
    Min()
    ,以获得结果集中最小的元素

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

    这是一个非常基本的错误,c#区分大小写!因此,将日期更改为声明的日期..当您修复该问题时,您将得到一个运行时异常,因为您的实际数据是字符串,但您将它们视为
    DateTime
    对象。您需要解析它们,而不是将它们强制转换为
    DateTime
    。您可以使用
    DateTime.ParseExact
    ,或者更好的方法是,完全去掉字符串并开始定义时间。不能隐式地将类型“long”转换为“int”。第行存在显式转换(是否缺少转换?):min=date.Ticks-fileDate.Ticks;您应该在日期处插入有效日期时间。添加(此处为有效日期时间);你现在正在做强项一个例子会是什么样子?“12:30”“1230”或其他什么?我在回答中添加了“如何”今天会是什么?今天=日期时间。现在;?添加(新的日期时间{1110});给我一个错误,这里还有一个错误,无法将类型“long”隐式转换为“int”。第行存在显式转换(是否缺少转换?):min=date.Ticks-fileDate.Ticks;查看设置DateTime对象有很多方法。你只需要决定哪种方式最适合你想要的。由于您似乎正在设置小时和分钟(假设“0430”是4:30AM),因此您需要一个以小时/分钟为参数的构造函数,或者需要直接指定小时/分钟属性。-------您可以使用dates.Add(新的日期时间(0,0,0,3,29,0));它将创建一个等于4:30AM(从零开始索引)的DateTime对象。声明无法将其ErrorProperty或索引器“Minute”分配给它--它是只读的,请访问上面的构造函数版本。您得到“无法隐式地将类型“long”转换为“int”。”的原因是“min”是int,而记号是long类型。更改“int min=int.MaxValue;”只是“龙敏;”我明白了,我必须将它转换为string类型才能显示它。
    theDates.Add(today.AddHours(13).AddMinutes(30));
    theDates.Add(today.AddHours(14).AddMinutes(30));
    theDates.Add(today.AddHours(15).AddMinutes(30));
    theDates.Add(today.AddHours(16).AddMinutes(30));
    theDates.Add(today.AddHours(17).AddMinutes(30));
    
      closetDate = myDates.Select(Math.Abs(x => x.Ticks - fileDate.Ticks)).Min()