我将这个函数从c转换为c#已经完成了一半,但我完全迷失了中间计算线的作用。
y -= m < 3;
C版
int DayOfWeek(int d, int m, int y)
{
static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
y -= m < 3;
return (y + y / 4 - y / 100 + y / 400 + t[m - 1] + d) % 7;
}
C#版本
int DayOfWeek(int d, int m, int y)
{
int[] t = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
y -= m < 3;
return (y + y / 4 - y / 100 + y / 400 + t[m - 1] + d) % 7;
}
1)我理解y - = m等于y = y - m但是“&lt;”是什么做?这是表达吗? 2)如何将其余部分转换为c#?
谢谢大家,澄清这是一个学位课程。
答案 0 :(得分:1)
y -= (m < 3) ? 1 : 0;
或更可读
if (m < 3) y -= 1;
甚至
if (m < 3) --y;
使用条件将1或0作为值返回的事实,它是一些C代码。修复如图所示。
编辑:我现在看到评论说这段代码是混淆的。我想我是一个如此古老的C帽子,我发现它在阅读时立即显而易见,而不是我建议那样写。
或者我们可以用真正的那种方式来做这件事:
int DayOfWeek(int d, int m, int y) => (new DateTime(y, m, d)).DayOfWeek;
答案 1 :(得分:1)
我不熟悉C#语法,但在C
中download
评估为m < 3
或0
。这条线
1
相当于
y -= m < 3;
答案 2 :(得分:1)
int DayOfWeek(int d, int m, int y)
{
var dt = new DateTime(y,m,d);
return (int) dt.DayOfWeek;
}