Каково ваше ожидаемое поведение в следующем случае (интервал включения)? - PullRequest
0 голосов
/ 13 мая 2019

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

Когда мы говорим об интервалах времени (например, с 01.00 до 02.00), я думаю, что мы все думаем, что это так и заканчиваем исключением: «математически» [01:00, 02:00). Я думаю, что это ясно и просто. Если нет, скажите мне, почему.

Но когда мы говорим об интервалах дат (пример: с 14.03.2019 по 22.05.2020), я не знаю, какое поведение люди ожидают. Я обычно думаю, как [14.3.2019, 22.5.2020]. Это означает, что 23:59:59.999, 22.5.2020 включено, как выражение: [14.3.2019, 23.5.2020).

Вопрос об этом фрагменте кода (упрощенно):

public class DateInterval{

    public readonly DateTime Start;
    public readonly DateTime End;
    //Enum (0= both, 1= start, 2= end)
    private readonly EndPointInclusionBehaviour _behaviour


    private DateTimeInterval(DateTime start, DateTime end){
        //Obvious
        Start= start.Date;

        //This is grinding my gears, have I to do this?
        End= end.Date.AddDays(1); 
        _behaviour = EndPointInclusionsBehaviour.IncludeStart;

        //Or this?
        End= end.Date.AddMilliseconds(-1);
        _behaviour = EndPointInclusionsBehaviour.IncludeBoth;

        //Or even this?
        End= end.Date;
        _behaviour = EndPointInclusionBehaviour.IncludeStart;

        //or this?
        End= end.Date.AddDays(1).AddMilliseconds(-1);
        _behaviour = EndPointInclusionsBehaviour.IncludeBoth;
    }
}

Какое поведение вы ожидаете?

1 Ответ

0 голосов
/ 13 мая 2019

Я бы просто задокументировал это и назвал бы параметры конструктора без объяснений:

public Interval(int lowerInclusiveBound, int upperExclusiveBound) { ... }

Я бы не изменил свой подход с датами.Сделайте это очевидным для потребителя, и он выберет границы, которые ему действительно нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...