【问题标题】:C# 'Not all code paths return a value' in switch statement while using default使用默认值时,C#'并非所有代码路径都在 switch 语句中返回值'
【发布时间】:2015-11-26 19:26:36
【问题描述】:

我正在尝试编写一个程序,在用户输入的任何日期之后给出下一个日期。下面的代码是我的 NextDate 类。我收到一条错误消息,指出并非所有代码路径都为我的 GetnextDate 方法返回值,即使我添加了默认值。我真的不知道发生了什么,任何帮助将不胜感激。谢谢:)

namespace NextDate
{
    class Date
    {
        // Variables
        private int date;
        private int month;
        private int year;

        // Methods
        public Date(int d, int m, int y)
        {
            this.date = d;
            this.month = m;
            this.year = y; 
        }

        // Display methods
        public override string ToString()
        {
            string s;

            s = "The date is " + this.date.ToString()
                + "/" + this.month.ToString()
                + "/" + this.year.ToString();
            return s;
        }

        private int GetNextDate(int d, int m)
        {
            switch(m)
            {
                case 04:
                case 06:
                case 09:
                case 11:
                    this.date = 01;
                    break;

                default: 
                    this.date = 31;
                    break;
            }
        }

    }
}

【问题讨论】:

  • 你应该明确写写 return 01;不是 this.date=01
  • 我正在尝试编写一个程序,在用户输入的任何日期之后给出下一个日期。这是代码的一些屏幕截图。我希望它打印 2002 年 4 月 31 日的完整日期,但它只显示 31。任何帮助将不胜感激。谢谢 :) [1]:i.stack.imgur.com/3to6U.png [2]:i.stack.imgur.com/trCJS.png
  • @gggg43553rob @gggg43553rob 请不要编辑问题并将其恢复为上一个问题,因为在编辑过程中,您问的是全新的问题。 但作为注意,您可以简单地使用DateTimeAddDay 方法来查找第二天。例如DateTime.Now.AddDays(1).ToShortDateString() 明天返回。 如果您需要更多帮助,请提出一个新问题
  • @gggg43553rob 当您提出新问题时,请创建一个新问题。这个想法是该帖子及其答案对人们以后使用谷歌搜索很有用。现在他们不是因为下面的所有答案都在回答不同的问题。我要恢复你的编辑。请在您的新问题中发布一个新问题,并在下面标记为“正确”。

标签: c# class switch-statement


【解决方案1】:

改变

private int GetNextDate(int d, int m)

private void GetNextDate(int d, int m)

【讨论】:

  • 技术上是正确的+1,我认为这个问题仍然需要更详细的答案,如I did希望你觉得它有帮助:)
【解决方案2】:

错误消息是自描述的,您没有从方法中返回任何东西,而它应该返回一个 int 作为返回值 (private int GetNextDate(...))

选项 1

当您只想执行一项任务时,例如在方法中设置this.date 的值,您不需要该方法的返回值,因此您只需将方法签名更改为:

private void GetNextDate(int d, int m)

选项 2

但是基于方法名称GetNextDate 并制作一个更可重用的方法,最好将方法更改为能够从该方法返回一个int。

你可以这样写:

private int GetNextDate(int d, int m)
{
    int date = 31;   
    switch(m)
    {
        case 4:
        case 6:
        case 9:
        case 11:
            date = 1;
            break;
    }
    return date;
}

并以这种方式使用它:

this.date= GetNextDate(...);

【讨论】:

    【解决方案3】:

    所有路径都没有返回值。您的方法应返回int 或返回类型应为void 类型。

    【讨论】:

    • 技术上是正确的+1,我认为这个问题仍然需要更详细的答案,如I did希望你觉得它有帮助:)
    【解决方案4】:

    该方法没有返回任何内容,但它的返回类型为int

    也许您的意思是返回0131 而不是设置this.date

    return this.date;
    

    或者,如果您想设置它但不返回任何内容,请将返回类型从 int 更改为 void

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2011-12-17
      相关资源
      最近更新 更多