C# C中假设的可能性#

C# C中假设的可能性#,c#,enums,C#,Enums,我可以对C#中系统枚举的强制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 我的代码的逻

我可以对C#中系统枚举的强制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标准-周一为第一天。在美国-周日是第一天。

是的,你可以信赖它,只要它是:

DayOfWeek枚举表示日历中的一周中的某一天 每周七天。此字段中常量的值 枚举范围从星期天到星期六。如果 强制转换为整数,其值范围为零(表示 星期天)到六点(表示星期六)


当然,虽然他们不太可能这样做,但Microsoft可以在未来的版本中自由更改此选项。

因为它是默认枚举(如BradleyDotNET中所链接的),所以您可以依赖这样一个事实,即值将是连续的,并保持记录它们的方式(通常,不依赖特定的数值计算也是个好主意)

为了得到一周的第一天,你应该你

所以,如果您的实际目标是将一周中的第一天到第七天的列表映射到
DayOfWeek.Monday
,那么您需要使用
CultureInfo.DateTimeFormat
来获取格式信息,而不是根据
FirstDayOfWeek
属性来映射所需的数字。基本+/%数学应该可以很好地计算一天

类似于(未经测试):


分配给枚举值的数字与区域性无关。下面您可以查看它的工作方式:


因此,星期天始终等于0,星期一等于1,依此类推。

Microsoft不太可能在未来的版本中更改此值,因为A)这样做可能会破坏大量代码,B)当前行为已记录在案。这是明确允许依赖记录的行为的。@Brian good point,我编辑以澄清这一点。微软在向后兼容性方面也做得很好。你有没有理由认为微软有一天可能会改变他们对这个枚举的定义?也就是说,为什么你甚至会提到行为改变的可能性(但在任何其他问题的其他答案中都没有提到)?@Brian主要是因为问题是“我能做出这个假设吗?”答案是“现在,可能在未来”。大多数问题都不是问假设是否有效。@Brian:因为它们当前的定义不符合ISO 8601标准,所以如果不是因为向后兼容性的问题,它本来是一个合适的变更候选者。
dayToEnumMap[1] = (DayOfWeek)(((int)(DayOfWeek.Sunday) +
    (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfTheWeek)) 
     % 7)
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum DayOfWeek {
    Sunday = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
}