在C#中假设的可能性

时间:2015-03-20 18:38:37

标签: c# enums

我可以对C#中系统枚举的casted int值进行假设吗?

例如:

//DayOfWeek
(int)DayOfWeek.Monday == 1,
(int)DayOfWeek.Tuesday == 2,
(int)DayOfWeek.Wednesday == 3,
(int)DayOfWeek.Thursday == 4,
(int)DayOfWeek.Friday == 5,
(int)DayOfWeek.Saturday == 6,
(int)DayOfWeek.Sunday == 0

我的代码的逻辑取决于它。但是,我不想写自己的映射,因为它......只是一个错误的解决方案。

修改 这里还有文化的东西。 ISO标准 - 周一第1天。在美国 - 第一天的星期日。

3 个答案:

答案 0 :(得分:6)

是的,你可以依赖它,只要它是documented

  

DayOfWeek枚举表示日历中的星期几   每周七天。这个常量的值   枚举范围从DayOfWeek.Sunday到DayOfWeek.Saturday。如果   强制转换为整数,其值范围为零(表示   DayOfWeek.Sunday)至6(表示DayOfWeek.Saturday)。

当然,虽然他们不太可能这样做,但微软可以在将来的版本中自由更改。

答案 1 :(得分:1)

由于它是默认枚举(在BradleyDotNET answer中链接),因此您可以依赖于这样的事实:值将是连续的并保持记录的方式(通常也不要依赖于特定的值numerations)。

为了获得一周的第一天,你应该DateTimeFormatInfo.FirstDayOfTheWeek

因此,如果您的实际目标是将一周中的第1至第7天的列表映射到DayOfWeek.Monday,则需要使用CultureInfo.DateTimeFormat来获取格式信息,而不是根据{{{{}}所需的地图编号1}}属性。基本+ /%数学应该适用于计算日。

像(未经测试)的东西:

FirstDayOfTheWeek

答案 2 :(得分:1)

分配给枚举值的数字与文化无关。您可以在下面查看它defined in the .Net framework

的方式
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum DayOfWeek {
    Sunday = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
}

所以星期日总是等于0,星期一到1,依此类推。