使用默认值时,C#'并非所有代码路径都在switch语句中返回值'

时间:2015-11-26 19:26:36

标签: c# class switch-statement

我正在尝试编写一个程序,在用户输入的任何日期之后给出下一个日期。下面的代码是我的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;
            }
        }

    }
}

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

变化

private int GetNextDate(int d, int m)

private void GetNextDate(int d, int m)

答案 2 :(得分:3)

错误消息是自我描述的,您没有从方法中返回任何内容,而它应该返回 int 作为返回值({{ 1}})

选项1

如果您只想执行任务,例如在方法中设置值private int GetNextDate(...),则不需要该方法的返回值,因此您只需将方法签名更改为:

this.date

选项2

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

你可以这样写:

private void GetNextDate(int d, int m)

并以这种方式使用它:

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;
}

答案 3 :(得分:0)

该方法不返回任何内容,但返回类型为int

也许您打算返回0131而不是设置this.date

return this.date;

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