c# - 从字典中提取信息... 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";
}
解决方案
不确定您是否被锁定为此使用字典,但我认为这是一个更友好的版本以及我将如何解决这个问题:
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
对于局部变量来说不是一个好的变量名。这可能会帮助您改进命名。
推荐阅读
- javascript - 如何获取输入的值并在javascript和html中加上任意数字?
- r - 如何计算多个变量的比例
- laravel - 为什么在实践中路由设置为posts.destroy的链接会路由到posts.show
- javascript - 点击后关闭链接列表
- azure - Azure API“获取所有警报”没有价值
- sql - 使用 sql 查询通过帖子获取喜欢计数
- tensorflow - 为什么 tf.test.is_gpu_available() 没有提供真假,它卡住了?
- python - 如何在 HISTOGRAM、matplotlib 中设置 y 轴和 x 轴变量
- c# - 全球 Hotkay 没有响应
- java - 遍历 R.string.name