2015-09-28 125 views
4

有沒有辦法將這段代碼彙總到1-2行?DayOfWeek獲得下一個DayOfWeek(週一,週二......週日)

我的目標是返回,例如,我有一個DayOfWeek,它是星期一,我想要在那之後(星期二)或之後的第二天。

  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; 
     } 

回答

4

是的。

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

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

的星期幾枚舉表示一週的日曆中有七天每週的天數。此枚舉中常量的值範圍從DayOfWeek.Sunday到DayOfWeek.Saturday。如果轉換爲整數,它的值從零(表示DayOfWeek.Sunday)到六(表示DayOfWeek.Saturday)。

那麼簡單的數學應該這樣做:

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

更換+ 1+ n如果這就是你所需要的。

+0

這是最好的一個。它占星期六到星期日的轉換 –

+0

這個工程很棒!謝謝! – Katherine

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

例如

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

將返回星期一

+0

你測試過了嗎? – user1666620

+0

是的,我注意到星期六的問題,因爲這周在星期一開始,但我編輯 – Mulflar

2

相同的結果的加法和取模東西以上回答,但更易讀IMHO:

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

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

0

一般情況下解決方案使用模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); 

可能,最好implmentation是隱藏擴展方法的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); 
+1

我認爲有兩個太多的7。 –

+0

@Ian Newson:當shift <0時,'%7'可以返回一個*負值* - 所以應該加上'+ 7'(和第二個'%7') –

+0

啊我看到..... .. –

相關問題