koo*_*osk 4 c# refactoring switch-statement
以下代码的目的是确定特定日期是否符合"周末",即周四中午12:00,最少2天和周一中午12:00之前
有没有更好的办法?If-Else变得丑陋,而战略模式对此来说太过分了.
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;
}
Run Code Online (Sandbox Code Playgroud)
你绝对应该重构dropoffDate - 因为代码重复了3次!最简单的清理:我会介绍一个检查pickupDate的函数,另一个检查dropoffDate:
private bool IsPickupWeekend(DateTime pickupDate)
{
switch (pickupDate.DayOfWeek)
{
case DayOfWeek.Thursday:
return pickupDate.Hour >= 12;
case DayOfWeek.Friday:
case DayOfWeek.Saturday:
return true;
}
}
return false;
}
private bool IsWeekendDropOff(DateTime dropoffDate)
{
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
if (dropoffDate.Hour <= 12)
{
return true;
}
return false;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
现在你的主要功能是2班轮:
if (ts.TotalDays >= 2 && ts.TotalDays <= 4)
{
return IsPickupWeekend(pickupDate) && IsWeekendDropOff(dropoffDate);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3281 次 |
| 最近记录: |