Не все пути кода возвращают значение при сравнении двух дат? - PullRequest
0 голосов
/ 10 апреля 2020

Я долго возился с этим и не мог выяснить, какой путь к коду не возвращает значение. Я пытаюсь проверить, является ли введенная дата позже текущей. Я благодарю вас, если вы можете помочь мне с этой проблемой. (Дата - это класс, и в скобках я проверяю его на примере.)

public bool IsLater(Date d)
{                              //Date d = 2020/4/25  Date = 2020/4/21
    if (d.year > year) //false
    {
        return true;
    }
    if (d.year < year) //false
    {
        return false;
    }
    if (d.year == year)//true
    {
        if (d.month > month)//false
        {
            return true;
        }
        if (d.month < month)//false
        {
            return false;
        }
        if (d.month == month)//true
        {
            if (d.day > day)//true
            {
                return true;//ok
            }
            if (d.day < day)
            {
                return false;
            }
            else if (d.day == day)
                return false;
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 10 апреля 2020

Лично я бы переписал это на это. ИМХО легче читать, и нет предупреждения «не все пути ...».

return
    d.year > year ||
    (d.year == year && d.month > month) ||
    (d.year == year && d.month == month && d.day > day)
    ;
1 голос
/ 10 апреля 2020

Я бы использовал класс DateTime вместо:

public bool IsLater(Date d)
{   
    DateTime a = new DateTimte (year, month, day);
    DateTime b = new DateTimte (d.year, d.month, d.day);
    return b > a;
}
0 голосов
/ 10 апреля 2020

Во-первых, вы можете позволить. Net сделать работу за вас: зачем изобретать велосипед? Сравнение дат - просто оператор >:

// Later: d is more than (year, month, day)
public bool IsLater(DateTime d) => d.Date > new DateTime(year, month, day);

Если вы настаиваете на сохранении текущей процедуры, сообщите компилятору, что if s объединены : превратите if в else if и окончательный if в каждой группе в else

public bool IsLater(Date d)
{                              
    if (d.year > year) 
        return true;
    else if (d.year < year) 
        return false;
    else // we have nothing else but equal years
    {
        if (d.month > month)
            return true;
        else if (d.month < month)
            return false;
        else // nothing else but equal months
        {
            if (d.day > day)
                return true;
            else if (d.day < day)
                return false;
            else 
                return false;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...