如何将此函数从C转换为C#
本文关键字:转换 函数 | 更新日期: 2023-09-27 18:15:46
我已经完成了将这个函数从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,但"<"做什么?这是一个表达吗?2( 如何将其余部分转换为c#?
谢谢大家的澄清,这是一个学位项目。
y -= (m < 3) ? 1 : 0;
或更易读的
if (m < 3) y -= 1;
甚至
if (m < 3) --y;
这是一些C代码,使用了条件语句返回1或0作为值的事实。如图所示进行固定。
编辑:我现在看到评论说这个代码是模糊的。我想我是一个老C帽,我一读就发现它很明显,而不是说我建议这样写。
或者我们可以用一种非常奇怪的方式来做这件事:
int DayOfWeek(int d, int m, int y) => (new DateTime(y, m, d)).DayOfWeek;
我不熟悉C#语法,但在C 中
m < 3
计算为CCD_ 1或CCD_。线路
y -= m < 3;
相当于
if(m < 3) { y--; }
int DayOfWeek(int d, int m, int y)
{
var dt = new DateTime(y,m,d);
return (int) dt.DayOfWeek;
}