我正在使用Windows窗体应用程序,该应用程序需要按照其元数据中的日期搜索图片。它比较日期在2个选定日期之间或1个确切日期。这是代码:
private void searchByDate(Tag tag, String pic)
{
if (tag.ToString().Contains("Date/Time Original"))
{
var regex = new Regex(@"\b\d{4}\:\d{2}\:\d{2}\b");
Match m = regex.Match(tag.ToString());
DateTime dateFound;
DateTime.TryParseExact(m.ToString(), "yyyy:MM:dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateFound);
Console.WriteLine(dateFound);
if (checkEnd && dateFound != null) if (dateFound >= date && dateFound <= dateEnd) Console.WriteLine("Date found between"); //foundPictures.Add(pic);
else if (dateFound != null) Console.WriteLine("single date found");//foundPictures.Add(pic);
else Console.WriteLine("No dates found");
}
}
if语句工作正常,但是当checkEnd(这是一个用于在两个日期之间查找的复选框)没有被检查时,其他语句完全被忽略,我只是找不到原因。这是日期之间的控制台输出:
16.09.2017 00:00:00
Date found between
16.09.2017 00:00:00
Date found between
07.12.2016 00:00:00
Date found between
搜索确切日期(16.09.2017)
16.09.2017 00:00:00
16.09.2017 00:00:00
07.12.2016 00:00:00
随机日期(01.01.1753)
16.09.2017 00:00:00
16.09.2017 00:00:00
07.12.2016 00:00:00
如您所见,给定的数据始终相同。我试图把另一个Console.WriteLine();在这些陈述后,它表明了。没有例外。
编辑为了澄清事情,我知道if语句中不需要括号,但不知道只有单个指令就是这种情况。我虽然是基于这条线。缺乏经验,没有人教我,没有足够的研究让我问这个愚蠢的问题。
答案 0 :(得分:2)
如果格式化代码,您会看到如果checkEnd
为假,if / else编码的方式将永远不会执行任何操作。
if (checkEnd && dateFound != null)
{
if (dateFound >= date && dateFound <= dateEnd)
{
Console.WriteLine("Date found between"); //foundPictures.Add(pic);
}
else if (dateFound != null)
{
Console.WriteLine("single date found");//foundPictures.Add(pic);
}
else
{
Console.WriteLine("No dates found");
}
}