我想使用此方法从数据库转换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();
}
答案 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语句 - 它将更容易阅读。此外,您目前正在进行比实际需要更多的演员表 - 当您只需要执行一次时,您会反复将字符串转换为大写。