【发布时间】:2009-11-25 15:26:04
【问题描述】:
以下代码的目的是确定特定日期是否符合“周末”条件,即周四下午 12:00 之后、至少 2 天和周一下午 12:00 之前
有没有更好的方法? If-Else 变得丑陋,而 Strategy 模式的工作量太大了。
public bool ValidateWeekend(DateTime pickupDate, DateTime dropoffDate)
{
TimeSpan ts = dropoffDate.Subtract(pickupDate);
if (ts.TotalDays >= 2 && ts.TotalDays <= 4)
{
switch (pickupDate.DayOfWeek)
{
case DayOfWeek.Thursday:
if (pickupDate.Hour >= 12)
{
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
if (dropoffDate.Hour <= 12)
{
return true;
}
return false;
}
}
break;
case DayOfWeek.Friday:
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
if (dropoffDate.Hour <= 12)
{
return true;
}
return false;
}
break;
case DayOfWeek.Saturday:
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
if (dropoffDate.Hour <= 12)
{
return true;
}
return false;
}
return false;
}
}
return false;
}
【问题讨论】:
-
除了将重复的代码重构为下面列出的自己的方法之外,我还非常喜欢使用更实用的解决方案方法。将每一天的逻辑隔离到它自己的特定函数中,然后构建一个以天为键、以适当的方法为值的映射。正如我上面所说,通过将您的取货日期放入他们自己的方法中,然后使用 lamdas 执行您的丢弃逻辑,我认为代码变得更加清晰。
标签: c# refactoring switch-statement