C#中假设的可能性
Possibility of assumption in C#
我可以对 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 标准 - 星期一,第一天。在美国 - 第一天星期日。
是的,你可以信赖它,只要它documented是:
The DayOfWeek enumeration represents the day of the week in calendars
that have seven days per week. The value of the constants in this
enumeration ranges from DayOfWeek.Sunday to DayOfWeek.Saturday. If
cast to an integer, its value ranges from zero (which indicates
DayOfWeek.Sunday) to six (which indicates DayOfWeek.Saturday).
当然,虽然他们这样做的可能性很小,但 Microsoft 可以在未来的版本中自由更改此设置。
因为它是默认枚举(如 BradleyDotNET 中的链接),您可以依赖这样一个事实,即值将是连续的并保持它们被记录的方式(通常最好不要依赖特定的数值)。
要获得一周的第一天,您应该 DateTimeFormatInfo.FirstDayOfTheWeek。
因此,如果您的实际目标是将一周中的第 1 至第 7 天的列表映射到 DayOfWeek.Monday
,您需要使用 CultureInfo.DateTimeFormat
来获取格式信息,而不是根据您需要的映射编号FirstDayOfTheWeek
属性。基本的 +/% 数学应该可以很好地计算天数。
类似于(未测试):
dayToEnumMap[1] = (DayOfWeek)(((int)(DayOfWeek.Sunday) +
(int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfTheWeek))
% 7)
分配给枚举值的数字与文化无关。下面大家可以看看它的样子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,依此类推。
我可以对 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 标准 - 星期一,第一天。在美国 - 第一天星期日。
是的,你可以信赖它,只要它documented是:
The DayOfWeek enumeration represents the day of the week in calendars that have seven days per week. The value of the constants in this enumeration ranges from DayOfWeek.Sunday to DayOfWeek.Saturday. If cast to an integer, its value ranges from zero (which indicates DayOfWeek.Sunday) to six (which indicates DayOfWeek.Saturday).
当然,虽然他们这样做的可能性很小,但 Microsoft 可以在未来的版本中自由更改此设置。
因为它是默认枚举(如 BradleyDotNET
要获得一周的第一天,您应该 DateTimeFormatInfo.FirstDayOfTheWeek。
因此,如果您的实际目标是将一周中的第 1 至第 7 天的列表映射到 DayOfWeek.Monday
,您需要使用 CultureInfo.DateTimeFormat
来获取格式信息,而不是根据您需要的映射编号FirstDayOfTheWeek
属性。基本的 +/% 数学应该可以很好地计算天数。
类似于(未测试):
dayToEnumMap[1] = (DayOfWeek)(((int)(DayOfWeek.Sunday) +
(int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfTheWeek))
% 7)
分配给枚举值的数字与文化无关。下面大家可以看看它的样子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,依此类推。