簡體   English   中英

DayOfWeek獲得下一個DayOfWeek(周一,周二......周日)

[英]DayOfWeek get the next DayOfWeek(Monday,Tuesday…Sunday)

有沒有辦法將此代碼匯總為1-2行?

我的目標是返回,例如,我有一個星期一的DayOfWeek,我希望在那之后(星期二)或之后的n天獲得。

         switch (_RESETDAY)
        {
            case DayOfWeek.Monday:
                _STARTDAY = DayOfWeek.Tuesday;
                break;
            case DayOfWeek.Tuesday:
                _STARTDAY = DayOfWeek.Wednesday;
                break;
            case DayOfWeek.Wednesday:
                _STARTDAY = DayOfWeek.Thursday;
                break;
            case DayOfWeek.Thursday:
                _STARTDAY = DayOfWeek.Friday;
                break;
            case DayOfWeek.Friday:
                _STARTDAY = DayOfWeek.Saturday;
                break;
            case DayOfWeek.Saturday:
                _STARTDAY = DayOfWeek.Sunday;
                break;
            case DayOfWeek.Sunday:
                _STARTDAY = DayOfWeek.Monday;
                break;
            default:
                _STARTDAY = DayOfWeek.Tuesday;
                break;
        }

這只是一個int枚舉,從星期日(0)到星期六(6),根據MSDN:

DayOfWeek枚舉表示每周七天的日歷中的星期幾。 此枚舉中常量的值范圍從DayOfWeek.Sunday到DayOfWeek.Saturday。 如果強制轉換為整數,則其值的范圍從零(表示DayOfWeek.Sunday)到六(表示DayOfWeek.Saturday)。

如此簡單的數學應該這樣做:

DayOfWeek nextDay = (DayOfWeek)(((int)_RESETDAY + 1) % 7);

如果您需要,請將+ 1替換為+ n

是。

(DayOfWeek)((int)(_RESETDAY+1)%7)

與上面回答的加法和模數相同的結果,但更可讀的imho:

day = (day == DayOfWeek.Saturday) ? DayOfWeek.Sunday : day + 1;

明顯的代碼意圖總是更令人愉快。

    static DayOfWeek dayplus (DayOfWeek day)
    {
        if (day == DayOfWeek.Saturday)
            return DayOfWeek.Sunday;
        else
            return day + 1;
    }

例如

Console.WriteLine(dayplus(DayOfWeek.Sunday));

星期一會回來

一般案例解決方案使用模數arithemtics

  DayOfWeek _RESETDAY = ...;
  int shift = 1; // can be positive or negative

  // + 7) % 7 to support negative shift´s
  DayOfWeek result = (DayOfWeek) ((((int)_RESETDAY + shift) % 7 + 7) % 7);

可能,最好的方法是隱藏 擴展方法中的combersome公式:

 public static class DayOfWeekExtensions {
   public static DayOfWeekShift(this DayOfWeek value, int shift) {
     return (DayOfWeek) ((((int)value + shift) % 7 + 7) % 7);
   }
 }

 ...

 var result = _RESETDAY.Shift(1);

並略微減少(僅在負移位不低於-7的情況下適用於所有情況):

     return (DayOfWeek)(((int)value + shift + 7) % 7);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM