c# - 如何将此函数从 C 转换为 C#?

标签 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 但“<”是做什么的?是表达吗? 2) 如何将其余部分转换为 C#?

谢谢大家,澄清这是学位类(class)。

最佳答案

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;

关于c# - 如何将此函数从 C 转换为 C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333176/

相关文章:

c# - 使用 MVC Razor View 在表中插入多行

c# - 将日期插入到 oracle

我们可以将负数的整数分配给无符号整数吗?

字符数组打印比我指定的少 1 个字符

java parking 费计算

php - MySQL 日期格式 - 难以查询日期

c# - 如何确定智能卡读卡器的类型(接触式与非接触式)

c# - `as` 会启用多态性吗?将继承的类传递给采用基类启用多态性的方法?

c - recvfrom() 套接字编程 Ubuntu

java - 无法解析的日期 : "2011-12-08T02:01:02+01:00"