我已经完成了将此函数从 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/