C# 及;if语句中的Or运算符

C# 及;if语句中的Or运算符,c#,if-statement,logical-operators,C#,If Statement,Logical Operators,我已经做了一个显示出生日期的程序,它也会考虑闰年,所以如果你输入1995年,第2个月,第29天,它会通过一个错误,因为它不是闰年。它还需要考虑每个月有多少天,这就是我需要帮助的部分。目前情况如下: if (month == 1 / && day > 31) { Console.WriteLine("January only has 31 days - Enter again");

我已经做了一个显示出生日期的程序,它也会考虑闰年,所以如果你输入1995年,第2个月,第29天,它会通过一个错误,因为它不是闰年。它还需要考虑每个月有多少天,这就是我需要帮助的部分。目前情况如下:

           if (month == 1 / && day > 31)
            {
                Console.WriteLine("January only has 31 days - Enter again");
                validDay = false;
            }
            else if (day >= 29 && !IsLeapYear(year) && month == 2)
            {
                Console.WriteLine("You were not born on a leap year or February only has 28 days - Enter again");
                validDay = false;
            }
           //And so on for each month
于是我就这样试着:

if (month == 1 || month == 3 || month == 5 || month == 7 || 
                month == 8 || month == 10 || month == 12 && day > 31)
            {
                Console.WriteLine("Your birth month only has 31 days - Enter again");
                validDay = false;
            }
            else if (day >= 29 && !IsLeapYear(year) && month == 2)
            {
                Console.WriteLine("You were not born on a leap year or February only has 28 days - Enter again");
                validDay = false;
            }
            else if (month == 3 || month == 6 || month == 9 || month == 11 && day > 30)
            {
                Console.WriteLine("Your birth month only has 30 days - Enter again");
                validDay = false;
            }

由于某种原因,即使你输入1997,5,28,它也会抛出错误信息。在5中选择的月份,但日期不大于31,那么为什么会这样做?我也愿意用不同的方法来实现这一点,因为我觉得还有另一种方法——数组可能?

尝试添加一些括号

if ((month == 1 || month == 3 || month == 5 || month == 7 || 
month == 8 || month == 10 || month == 12) && day > 31)
没有parethesis,最后一个&仅指最后一个月

您还可以使用DateTime构造函数,查看它是否引发异常
()或使用DateTime.TryParse。

我建议您使用DateTime.TryParse-它将自动验证所有日期,然后您可以向用户返回类似“无效日期”的内容。

操作员有一个调用。
尝试使用括号以达到您希望达到的优先级。

为什么不使用DateTime.TryParse

请同时查看以下链接:


我建议使用DateTime.TryParseExact,如下所示

string year = "1997";
string month = "5";
string day = "28";
string dateText = string.Format("{0}/{1}/{3}", year, month, day);
DateTime date;

if (!DateTime.TryParseExact(dateText, "yyyy/MM/dd", null, DateTimeStyles.None, out date))
{
    Console.WriteLine("Date is invalid");
}

祝你好运

因为您的
仅应用于最后一个
。谢谢大家,使用括号修复了问题。我把它改为使用日期时间,但我认为使用这种方式会让制作程序失去乐趣。不管怎么说,还是有两件新的事情要做,所以再次感谢:)你处理好世纪闰年了吗?有一种方法可以使这个丑陋的代码块消失(并解决隐藏在其中的bug)。这种方法有效:
这种方法有效:公共静态bool IsLeapYear(int year){if(year%4==0 | | year%100==0和year%400==0)返回true;否则返回false;}