C#Switch语句重构

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

以下代码的目的是确定特定日期是否符合“周末”条件,即周四下午12:00之后,至少2天,周一下午12:00之前

有更好的办法吗?如果其他方法变得难看,那么策略模式对此来说就太多了

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.TotalDays
private 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;
    }