如何将此功能从C转换为C#?

时间:2016-10-30 20:15:31

标签: c# c date

我将这个函数从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#?

谢谢大家,澄清这是一个学位课程。

3 个答案:

答案 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;
}