[英]Most elegant way to morph this sequence
我已經將星期幾存儲在數據庫表中(我無法控制),並且需要在代碼中使用它。
問題是,我想使用System.DayOfWeek枚舉對此進行表示,並且序列不相同。
在數據庫中,如下所示:
1 2 3 4 5 6 7
S M T W T F S
我需要它如下:
0 1 2 3 4 5 6
M T W T F S S
最優雅的方法是什么?
例如,我可以做:
i = dayOfWeek;
i = i - 2;
if (i < 0) {
i = 6;
}
但這有點不雅致。 有什么建議么?
<編輯>
啊 顯然(.net反射器說)從星期日開始,DayOfWeek的索引為0。
在詢問愚蠢的問題之前,請務必先閱讀文檔。
但是,我仍然對答案很感興趣,只是為了滿足自己的好奇心,所以就去做。
</ EDIT>
您想要的價值是
(DayOfWeek)((dbDay + 5) % 7)
使用模運算符%
。
將其包裝在一個函數中:
public int DbToDayOfWeek(int dbDay)
{
if (dbDay == 1)
return 6;
return dbDay -2;
}
要么:
public DayOfWeek DbToDayOfWeek(int dbDay)
{
if (dbDay == 1)
return DayOfWeek.Sunday;
return (DayOfWeek)(dbDay - 2);
}
盡管我無法想象這些值會發生變化,但是您應該真正避免假設DayOfWeek枚舉值保持不變-因此要相應地編寫代碼。
static DayOfWeek[] _toDaysTable = new DayOfWeek[] {
DayOfWeek.Sunday, DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday,
DayOfWeek.Thursday, DayOfWeek.Friday, DayOfWeek.Saturday
};
static DayOfWeek ToDayOfWeek(int myDayOfWeek)
{
int index = myDayOfWeek - 1;
if (index < 0 || index >= _toDaysTable.Length)
throw new ArgumentOutOfRangeException("myDayOfWeek");
return _toDaysTable[index];
}
static int FromDayOfWeek(DayOfWeek day)
{
int index = Array.IndexOf(_toDaysTable, day);
if (index < 0)
throw new ArgumentOutOfRangeException("day");
return index + 1;
}
您可以只創建自己的枚舉並將該枚舉直接映射到數據庫中的值
public enum DayOfWeek
{
Mon = 2,
Tue = 3,
Wed = 4,
Thu = 5,
Fri = 6,
Sat = 7,
Sun = 1
}
然后,您可以使用DayOfWeek
類型的擴展方法來檢索值:
public static int ToInt(this DayOfWeek dow)
{
return (int)dow;
}
除非您依賴DayOfWeek
與Date進行實際比較,否則必須在偏移量之間進行轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.