else if 和 else 语句被忽略

else if and else statement are ignored

我正在开发一个 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 语句中不需要大括号,但不知道只有一条指令才需要大括号。我虽然是基于这条线。缺乏经验,没有人教我,没有足够的研究导致我问这个愚蠢的问题。

如果您格式化代码,您会发现如果 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");
    }
}