【问题标题】:C# Referencing the return value of a boolean method in another boolean methodC# 在另一个布尔方法中引用一个布尔方法的返回值
【发布时间】:2018-10-04 23:50:00
【问题描述】:

我想知道如何在另一个方法中使用布尔方法的结果。下面的代码包含两个方法,一个名为ValidateDay,另一个名为IsLeapYearIsLeapYear 确定用户输入的整数是否为闰年。 ValidateDay 根据用户输入的月份数检查用户输入的日期是否为有效日期。为了检查 2 月 29 日是否有效,我需要 ValidateDay 方法来了解 IsLeapYear 的结果是真还是假。但是,我不确定如何在ValidateDay 方法中引用IsLeapYear 的返回值。任何建议将不胜感激。

// Determines if day is valid
    public Boolean ValidateDay()
    {
        IsLeapYear();

        if(Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8 || Month == 10 || Month == 12)
        {
            if (Day >= 1 && Day <= 31)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else if (Month == 4 || Month == 6 || Month == 9 || Month == 11)
        {
            if (Day >= 1 && Day <= 30)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else if (Month == 2 && IsLeapYear(true))
        {
            if (Day >= 1 && Day <= 29)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else if (Month == 2 && IsLeapYear(false))
        {
            if (Day >= 1 && Day <= 28)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

    // Determine if year is a leap year
    public Boolean IsLeapYear()
    {
        if ((Year % 4 == 0 && Year % 100 != 0) || (Year % 400 == 0))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

【问题讨论】:

  • Boolean isLeap = IsLeapYear(); 然后你可以在你的 if 语句中使用 isLeap else if (Month == 2 &amp;&amp; isLeap)else if (Month == 2 &amp;&amp; !isLeap) //! means NOT
  • 当然你可以在你的if语句中直接调用方法` else if (Month == 2 && IsLeapYear())`和` else if (Month == 2 && !IsLeapYear())`
  • 还有一点if (Month == 2 &amp;&amp; ! isLeap) 等于if (Month == 2 &amp;&amp; isLeap == false)if (Month == 2 &amp;&amp; isLeap) 等于if (Month == 2 &amp;&amp; isLeap == true)

标签: c#


【解决方案1】:

在以下行中,您将值 true 传递给 IsLeapYear() 方法:

else if (Month == 2 && IsLeapYear(true))

但是您的 IsLeapYear() 方法没有参数,我猜您打算在这里做的是评估 IsLeapYear() 的结果是否为真。只需将其更改为以下内容:

else if (Month == 2 && IsLeapYear() == true)

或更简洁:

else if (Month == 2 && IsLeapYear())

要检查该值是否为假,只需使用 !要评估的表达式之前的字符:

else if (Month == 2 && !IsLeapYear())

或者如果您愿意:

else if (Month == 2 && IsLeapYear() == false)

【讨论】:

    【解决方案2】:

    我认为您可以尝试使用IsLeapYear()!IsLeapYear() 来检查是否是闰年。

    else if (Month == 2 && IsLeapYear())
    {
        if (Day >= 1 && Day <= 29)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else if (Month == 2 && !IsLeapYear())
    {
        if (Day >= 1 && Day <= 28)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    

    .net 库中有一个 DateTime.IsLeapYear 方法,我会用它来检查年份是否是闰年。

    DateTime.IsLeapYear(year)
    

    【讨论】:

      【解决方案3】:

      我确实觉得你有点过于复杂了。

      试试这个方法:

      public Boolean ValidateDay()
      {
          try
          {
              return Day >= 1 && Day <= DateTime.DaysInMonth(Year, Month);
          }
          catch (ArgumentOutOfRangeException)
          {
              return false;
          }
      }
      
      public Boolean IsLeapYear()
      {
          try
          {
              return DateTime.IsLeapYear(Year);
          }
          catch (ArgumentOutOfRangeException)
          {
              return false;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 2013-01-04
        • 1970-01-01
        • 2012-11-03
        相关资源
        最近更新 更多