[英]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.