C#Switch语句重构
以下代码的目的是确定特定日期是否符合“周末”条件,即周四下午12:00之后,至少2天,周一下午12:00之前 有更好的办法吗?如果其他方法变得难看,那么策略模式对此来说就太多了C#Switch语句重构,c#,refactoring,switch-statement,C#,Refactoring,Switch Statement,以下代码的目的是确定特定日期是否符合“周末”条件,即周四下午12:00之后,至少2天,周一下午12:00之前 有更好的办法吗?如果其他方法变得难看,那么策略模式对此来说就太多了 public bool ValidateWeekend(DateTime pickupDate, DateTime dropoffDate) { TimeSpan ts = dropoffDate.Subtract(pickupDate); if (ts.TotalDays &g
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;
}
public bool ValidateWeekend(DateTime pickupDate、DateTime dropoffDate)
{
TimeSpan ts=dropoffDate.Subtract(pickupDate);
如果(ts.TotalDays>=2&&ts.TotalDays=12)
{
开关(DROPOFDATE.DayOfWeek)
{
星期日,星期日:
返回true;
案件星期一星期一:
如果(dropoffDate.Hour我想你可以在这里提取一个方法:
private bool ValidateDropoff(DateTime dropoffDate)
{
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
return dropoffDate.Hour <= 12;
default:
return false;
}
}
private bool ValidateDropoff(DateTime dropoffDate)
{
开关(DROPOFDATE.DayOfWeek)
{
星期日,星期日:
返回true;
案件星期一星期一:
如果(ts.TotalDays>=2&&ts.TotalDays),则返回dropoffDate.Hour{
开关(DROPOFDATE.DayOfWeek)
{
星期日,星期日:
返回true;
案件星期一星期一:
退货退换货日期。小时=12)退货时间限制();
打破
案件星期五星期五:
星期六,星期六:
返回时间限制();
违约:
打破
}
}
返回false;
不太清楚,但您可以这样做:
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:
return dropoffDate.Hour <= 12;
}
}
break;
case DayOfWeek.Friday:
switch (dropoffDate.DayOfWeek){
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
return dropoffDate.Hour <= 12;
}
break;
case DayOfWeek.Saturday:
switch (dropoffDate.DayOfWeek){
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
return dropoffDate.Hour <= 12;
}
return false;
}
}
return false;
}
public bool ValidateWeekend(DateTime pickupDate、DateTime dropoffDate){
TimeSpan ts=dropoffDate.Subtract(pickupDate);
如果(ts.TotalDays>=2&&ts.TotalDays=12){
开关(DROPOFDATE.DayOfWeek){
星期日,星期日:
返回true;
案件星期一星期一:
return dropoffDate.Hour您肯定应该重构dropoffDate out-因为代码重复了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;
}
private bool IsPickupWeekend(日期时间选取更新)
{
开关(pickupDate.DayOfWeek)
{
星期四,星期四:
返回pickupDate.Hour>=12;
案件星期五星期五:
星期六,星期六:
返回true;
}
}
返回false;
}
私人bool IsWeekendDropOff(DateTime dropoffDate)
{
开关(DROPOFDATE.DayOfWeek)
{
星期日,星期日:
返回true;
案件星期一星期一:
如果(dropoffDate.Hour=2&&ts.TotalDaysMy first crack:
if (ts.TotalDays >= 2 && ts.TotalDays <= 4)
{
switch (pickupDate.DayOfWeek)
{
case DayOfWeek.Thursday:
case DayOfWeek.Friday:
case DayOfWeek.Saturday:
if (pickupDate.DayOfWeek == DayOfWeek.Thursday && pickupDate.Hour <= 12)
return false;
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
return true;
case DayOfWeek.Monday:
return dropoffDate.Hour <= 12;
}
return false;
default:
return false;
}
}
return false;
如果开关中的(ts.TotalDays>=2&&ts.TotalDays,请重试
retrun (dropoffDate.DayOfWeek == DayOfWeek.Sunday && dropoffDate.Hour <= 12 || dropoffDate.DayOfWeek == DayOfWeek.Sunday)
retrun(dropoffDate.DayOfWeek==DayOfWeek.Sunday&&dropoffDate.Hour我会这样做
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)
{
reurn DayOfWeek(dropOffDate.DayOfWeek);
}
break;
case DayOfWeek.Friday, DayOfWeek.Saturday:
{
return DayOfWeek(dropOffDate.DayOfWeek);
}
}
}
return false;
}
public bool DayOfWeek(DateTime dropOffDate)
{
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
{
return true;
}
case DayOfWeek.Monday:
{
if (dropoffDate.Hour <= 12)
{
return true;
}
return false;
}
return false;
}
}
public bool ValidateWeekend(DateTime pickupDate、DateTime dropoffDate)
{
TimeSpan ts=dropoffDate.Subtract(pickupDate);
如果(ts.TotalDays>=2&&ts.TotalDays=12)
{
reurn DayOfWeek(dropOffDate.DayOfWeek);
}
打破
案件星期五、星期五、星期六:
{
返回DayOfWeek(dropOffDate.DayOfWeek);
}
}
}
返回false;
}
公共bool DayOfWeek(DateTime dropOffDate)
{
开关(DROPOFDATE.DayOfWeek)
{
星期日,星期日:
{
返回true;
}
案件星期一星期一:
{
如果(dropoffDate.Hour这是我的尝试:
/// <summary>
/// Gets the weekend days.
/// </summary>
/// <returns></returns>
public List<DayOfWeek> GetWeekendDays()
{
List<DayOfWeek> days = new List<DayOfWeek>()
{
DayOfWeek.Thursday,
DayOfWeek.Friday,
DayOfWeek.Sunday
};
return days;
}
/// <summary>
/// Validates the weekend.
/// </summary>
/// <param name="pickupDate">The pickup date.</param>
/// <param name="dropoffDate">The dropoff date.</param>
/// <returns></returns>
public bool ValidateWeekend(DateTime pickupDate, DateTime dropoffDate)
{
bool isValid = false;
TimeSpan ts = dropoffDate.Subtract(pickupDate);
if (ts.TotalDays >= 2 && ts.TotalDays <= 4)
{
List<DayOfWeek> days = GetWeekendDays();
foreach (DayOfWeek day in days)
{
if(pickupDate.DayOfWeek == day)
{
isValid = ValidateDropOff(dropoffDate);
break;
}
}
}
return isValid;
}
/// <summary>
/// Validates the drop off.
/// </summary>
/// <param name="dropoffDate">The dropoff date.</param>
/// <returns></returns>
private static bool ValidateDropOff(DateTime dropoffDate)
{
bool isValidDropOff = (dropoffDate.DayOfWeek == DayOfWeek.Sunday);
if(dropoffDate.DayOfWeek == DayOfWeek.Monday)
{
if (dropoffDate.Hour <= 12)
{
isValidDropOff = true;
}
}
return isValidDropOff;
}
//
///得到周末。
///
///
公共列表GetWeekendDays()
{
列表天数=新列表()
{
星期四,星期四,
星期五,星期五,
星期天,星期天
};
返程天数;
}
///
///验证周末。
///
///接送日期。
///下车日期。
///
公共bool ValidateWeekend(日期时间选取更新、日期时间删除日期)
{
bool isValid=false;
TimeSpan ts=dropoffDate.Subtract(pickupDate);
如果(ts.TotalDays>=2&&ts.TotalDaysprivate readonly TimeSpan Midday=new TimeSpan(12,0,0);
公共bool ValidateWeekend(日期时间选取更新、日期时间删除日期)
{
TimeSpan lengthOfTrip=dropoffDate.Subtract(pickupDate);
如果(lengthOfTrip.TotalDays<2 | | lengthOfTrip.TotalDays>4)
返回false;
返回IsPickupDateConsideredWeekend(pickupDate)和&IsDropoffDateConsideredWeekend(dropoffDate);
}
私有bool IsPickupDateConsideredWeekend(日期时间选取更新)
{
如果(pickupdate.DayOfWeek==DayOfWeek.周四和&pickupdate.TimeOfDay>Midday)
返回true;
返回false;
}
私人bool IsDropOffDateConsidedWeekend(日期时间dropoffDate)
{
如果(dropoffDate.DayOfWeek==DayOfWeek.Monday&&dropoffDate.TimeOfDay结尾处需要一个“return false;”;否则,不是每个路径都会返回一个值。或者,只需将您拥有的“return false;”移到开关外部即可。@Gorpik,默认情况下会解决这个问题。每个路径实际上都会返回一个值。星期六不应该是这种情况吗s代码?请让我知道,如果更新时间:星期四1300小时,放弃日期:星期六1400小时,此代码是否有效?非常确定这将检查上午12点而不是12点PM@Grzenio:IsWeekendDropOff功能是否应将星期六作为下车日期?考虑到PickUpDate是星期四1300小时,则下车日期可以是星期六1400小时
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)
{
reurn DayOfWeek(dropOffDate.DayOfWeek);
}
break;
case DayOfWeek.Friday, DayOfWeek.Saturday:
{
return DayOfWeek(dropOffDate.DayOfWeek);
}
}
}
return false;
}
public bool DayOfWeek(DateTime dropOffDate)
{
switch (dropoffDate.DayOfWeek)
{
case DayOfWeek.Sunday:
{
return true;
}
case DayOfWeek.Monday:
{
if (dropoffDate.Hour <= 12)
{
return true;
}
return false;
}
return false;
}
}
/// <summary>
/// Gets the weekend days.
/// </summary>
/// <returns></returns>
public List<DayOfWeek> GetWeekendDays()
{
List<DayOfWeek> days = new List<DayOfWeek>()
{
DayOfWeek.Thursday,
DayOfWeek.Friday,
DayOfWeek.Sunday
};
return days;
}
/// <summary>
/// Validates the weekend.
/// </summary>
/// <param name="pickupDate">The pickup date.</param>
/// <param name="dropoffDate">The dropoff date.</param>
/// <returns></returns>
public bool ValidateWeekend(DateTime pickupDate, DateTime dropoffDate)
{
bool isValid = false;
TimeSpan ts = dropoffDate.Subtract(pickupDate);
if (ts.TotalDays >= 2 && ts.TotalDays <= 4)
{
List<DayOfWeek> days = GetWeekendDays();
foreach (DayOfWeek day in days)
{
if(pickupDate.DayOfWeek == day)
{
isValid = ValidateDropOff(dropoffDate);
break;
}
}
}
return isValid;
}
/// <summary>
/// Validates the drop off.
/// </summary>
/// <param name="dropoffDate">The dropoff date.</param>
/// <returns></returns>
private static bool ValidateDropOff(DateTime dropoffDate)
{
bool isValidDropOff = (dropoffDate.DayOfWeek == DayOfWeek.Sunday);
if(dropoffDate.DayOfWeek == DayOfWeek.Monday)
{
if (dropoffDate.Hour <= 12)
{
isValidDropOff = true;
}
}
return isValidDropOff;
}
private readonly TimeSpan Midday = new TimeSpan(12, 0, 0);
public bool ValidateWeekend(DateTime pickupDate, DateTime dropoffDate)
{
TimeSpan lengthOfTrip = dropoffDate.Subtract(pickupDate);
if (lengthOfTrip.TotalDays < 2 || lengthOfTrip.TotalDays > 4)
return false;
return IsPickupDateConsideredWeekend(pickupDate) && IsDropoffDateConsideredWeekend(dropoffDate);
}
private bool IsPickupDateConsideredWeekend(DateTime pickupdate)
{
if (pickupdate.DayOfWeek == DayOfWeek.Thursday && pickupdate.TimeOfDay > Midday)
return true;
return false;
}
private bool IsDropoffDateConsideredWeekend(DateTime dropoffDate)
{
if (dropoffDate.DayOfWeek == DayOfWeek.Monday && dropoffDate.TimeOfDay <= Midday)
return true;
return false;
}