下面的代码的目的是确定某一特定日期下午12:00周四后有资格作为“周末”,即最少2天前周一下午12:00C#的switch语句重构
是有更好的方法吗?如果 - 其他人变得丑陋,战略模式对于这一点太过分了。
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执行放弃逻辑,我认为代码变得更加清晰。 – 2009-11-25 15:56:00