nic*_*ten 7 c# enums dayofweek
为什么以下代码不起作用:
endDate.AddDays(7-endDate.DayOfWeek);
Run Code Online (Sandbox Code Playgroud)
虽然这会:
endDate.AddDays(0-endDate.DayOfWeek + 7);
Run Code Online (Sandbox Code Playgroud)
?
(通过"不起作用"我的意思是导致以下编译错误:"无法从'System.DayOfWeek'转换为'double'")
Eri*_*sch 12
扩展Lasse所说的内容(或者说更明确一点).
因为0可以转换为Enum类型,
0 - endDate.DayOfWeek becomes
(DayOfWeek)0 - endDate.DayOfWeek
Run Code Online (Sandbox Code Playgroud)
因为你可以从另一个枚举中减去一个枚举并获得整数差异:
(DayOfWeek)0 - endDate.DayOfWeek == (int)endDate.DayOfWeek
Run Code Online (Sandbox Code Playgroud)
因此,由于减法的结果是int,因此可以向其中添加7.
endDate.AddDays(0-endDate.DayOfWeek + 7);
Run Code Online (Sandbox Code Playgroud)
所以,如果星期一的枚举值是1
0 - endDate.DayOfWeek == -1 + 7 == 6
Run Code Online (Sandbox Code Playgroud)
但是,你不能这样做.
endDate.DayOfWeek - 0 + 7,
Run Code Online (Sandbox Code Playgroud)
因为计算的结果类型取决于最左侧.因此,当0 - endDate.DayOfWeek产生一个整数时,endDate.DayOfWeek - 0会产生一个枚举DayOfWeek.
最有趣的是,你可以使用这种副作用来获得枚举的值,而不需要施放,但我会考虑这种hackish和混乱...因此要避免.
int enumValue = -(0 - endDate.DayOfWeek);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10485 次 |
| 最近记录: |