使用此方法时,c#返回错误“并非所有代码路径都返回值”

时间:2017-03-18 03:00:44

标签: c#

我想使用此方法从数据库转换3个字母的日期。但是当我创建它时它返回一个错误,这个方法应该在输出中显示3个字母日期的相应数字。知道如何解决这个问题吗?

public static string MonthConvert(string input)
        {
            string month1 = "";
            string month3 = "";
            string result = "";
            month3 = input;
            if (month3.ToUpper().Equals("JAN"))
                month1 = "01/";
            else if (month3.ToUpper().Equals("FEB"))
                month1 = "02/";
            else if (month3.ToUpper().Equals("MAR"))
                month1 = "03/";
            else if (month3.ToUpper().Equals("APR"))
                month1 = "04/";
            else if (month3.ToUpper().Equals("MAY"))
                month1 = "05/";
            else if (month3.ToUpper().Equals("JUN"))
                month1 = "06/";
            else if (month3.ToUpper().Equals("JUL"))
                month1 = "07/";
            else if (month3.ToUpper().Equals("AUG"))
                month1 = "08/";
            else if (month3.ToUpper().Equals("SEP"))
                month1 = "09/";
            else if (month3.ToUpper().Equals("OCT"))
                month1 = "10/";
            else if (month3.ToUpper().Equals("NOV"))
                month1 = "11/";
            else if (month3.ToUpper().Equals("DEC"))
                month1 = "12/";
            result = month1.ToString();
        }

3 个答案:

答案 0 :(得分:1)

如果function返回类型不是void,则该函数必须返回一个值。在您的代码中,function返回类型为string,但它没有返回任何内容(意味着 - 您没有在函数的最后一行提及return语句。修改您的代码,如下所示

public static string MonthConvert(string input)
{
    string month1 = "";
    string month3 = "";
    string result = "";
    month3 = input;
    if (month3.ToUpper().Equals("JAN"))
        month1 = "01/";
    else if (month3.ToUpper().Equals("FEB"))
        month1 = "02/";
    else if (month3.ToUpper().Equals("MAR"))
        month1 = "03/";
    else if (month3.ToUpper().Equals("APR"))
        month1 = "04/";
    else if (month3.ToUpper().Equals("MAY"))
        month1 = "05/";
    else if (month3.ToUpper().Equals("JUN"))
        month1 = "06/";
    else if (month3.ToUpper().Equals("JUL"))
        month1 = "07/";
    else if (month3.ToUpper().Equals("AUG"))
        month1 = "08/";
    else if (month3.ToUpper().Equals("SEP"))
        month1 = "09/";
    else if (month3.ToUpper().Equals("OCT"))
        month1 = "10/";
    else if (month3.ToUpper().Equals("NOV"))
        month1 = "11/";
    else if (month3.ToUpper().Equals("DEC"))
        month1 = "12/";
    result = month1;
    return month1;
}

答案 1 :(得分:1)

我建议修改你的方法。而不是构建此功能,请查看此代码段:

    static void Main(string[] args)
    { 
        var testVals = new[] {"Jan", "FEB", "mar", "bad"};

        foreach (var v in testVals)
        {
            DateTime dt;
            if (DateTime.TryParseExact(v.ToUpper(),
                "MMM",
                CultureInfo.CurrentCulture, // you may want new CultureInfo("en-US") if you intend only English values to pass.
                DateTimeStyles.AssumeLocal,
                out dt))
                Console.WriteLine($"{v} returns {dt.Month}");
            else
                Console.WriteLine($"{v} failed parsing.");
        }

        Console.ReadKey();
    }

当.NET完成后,无需重新发明轮子。

如果您确定需要此功能,请尝试以下操作:

    public static string MonthConvert(string input)
    {
        if (input == null) return "";   //Otherwise you'll get a NullReferenceException - which you probably should let be thrown.

        if (input.Equals("JAN", StringComparison.InvariantCultureIgnoreCase)) return "01/";
        if (input.Equals("FEB", StringComparison.InvariantCultureIgnoreCase)) return "02/";
        if (input.Equals("MAR", StringComparison.InvariantCultureIgnoreCase)) return "03/";
        if (input.Equals("APR", StringComparison.InvariantCultureIgnoreCase)) return "04/";
        if (input.Equals("MAY", StringComparison.InvariantCultureIgnoreCase)) return "05/";
        if (input.Equals("JUN", StringComparison.InvariantCultureIgnoreCase)) return "06/";
        if (input.Equals("JUL", StringComparison.InvariantCultureIgnoreCase)) return "07/";
        if (input.Equals("AUG", StringComparison.InvariantCultureIgnoreCase)) return "08/";
        if (input.Equals("SEP", StringComparison.InvariantCultureIgnoreCase)) return "09/";
        if (input.Equals("OCT", StringComparison.InvariantCultureIgnoreCase)) return "10/";
        if (input.Equals("NOV", StringComparison.InvariantCultureIgnoreCase)) return "11/";
        if (input.Equals("DEC", StringComparison.InvariantCultureIgnoreCase)) return "12/";

        return ""; //You should really consider throwing an ArgumentException, here. 
    }

答案 2 :(得分:0)

很抱歉,我正在通过电话写这封信,但正如其他人所说,错误信息完全正确:你根本没有退货,因为没有退货声明。

通常,在这种情况下仔细查看错误消息的文本是有帮助的,并理解编译器告诉您的原因。在这种情况下,问题是“在什么情况下会返回什么?” How to debug small programs中描述的技术在这里可能会有所帮助,特别是“橡皮鸭调试” - 例如,试着解释为什么你的程序显然会在每种情况下返回一些东西,直到你找到一个你无法解释的案例。您无法解释的情况可能是您的错误。)

我还强烈建议在这里使用switch语句而不是重复if ... else if语句 - 它将更容易阅读。此外,您目前正在进行比实际需要更多的演员表 - 当您只需要执行一次时,您会反复将字符串转换为大写。