Извлечение информации из словаря ... Альтернатива операторам if / else - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть словарь, который выглядит следующим образом:

Dictionary<string, DateTime> Seasons = new Dictionary<string, DateTime>
{
    { "WINTER_START", Date1},
    { "WINTER_END", Date2 },
    { "SUMMER_START", Date3 },
    { "SUMMER_END", Date4 }
};

Допустим, у меня есть сегодняшняя дата var today = DateTime.Today.Date, и я хочу знать, выпадает ли сегодняшняя дата зимой или летом.Я сделал это с помощью оператора If / Else, но что-то внутри меня говорит мне, что есть лучший способ ..

string currentSeason = "";

if (today >= Seasons["WINTER_START"] && today <= Seasons["WINTER_END"])
{
    currentSeason = "WINTER";
} 
else if (today >= Seasons["SUMMER_START"] && today <= Seasons["SUMMER_END"])
{
    currentSeason = "SUMMER";
}

1 Ответ

0 голосов
/ 29 ноября 2018

Не уверен, что вы заблокированы для использования словаря для этого, но я думаю, что это более дружественная версия и как я бы решил эту проблему:

void Main()
{
    var seasons = new List<Season>
    {
        new Season("Winter", Date1, Date2),
        new Season("Summer", Date3, Date4)
    };

    var today = DateTime.Today;

    // null if no matching season was found
    string currentSeason = seasons.FirstOrDefault(season => season.InSeason(today))?.Name;
}

public class Season
{
    public Season(string name, DateTime start, DateTime end)
    {
        Name = name;
        Start = start;
        End = end;
    }

    public string Name { get; set; }

    public DateTime Start { get; set; }
    public DateTime End { get; set; }

    public bool InSeason(DateTime input)
    {
        return input >= Start && input <= End;
    }
}

Также небольшое замечание: Current_Season не подходит для локальной переменной. Это может помочь вам улучшить ваше наименование.

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