如何将此函数从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#?

谢谢大家的澄清,这是一个学位项目。

如何将此函数从C转换为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;
}