首页 > 解决方案 > 从字典中提取信息... if/else 语句的替代方法

问题描述

我有一本看起来像这样的字典:

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";
}

标签: c#data-structures

解决方案


不确定您是否被锁定为此使用字典,但我认为这是一个更友好的版本以及我将如何解决这个问题:

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对于局部变量来说不是一个好的变量名。可能会帮助您改进命名。


推荐阅读