我热衷于作为开发人员进行改进,我想知道我的代码有可能改进,对此我是新手,逻辑也很小
这是我的代码:
private int Period(DateTime date)
{
int period = 0;
if(date!= null)
{
int numeroMes = int.Parse(date.Month.ToString());
if(numeroMes <= 2)
{
period = 1;
}
else if (numeroMes <= 4 && numeroMes > 2)
{
periodo = 2;
}
else if (numeroMes <= 6 && numeroMes > 4)
{
period = 3;
}
else if (numeroMes <= 8 && numeroMes > 6)
{
period = 4;
}
else if (numeroMes <= 10 && numeroMes > 8)
{
period = 5;
}
else if (numeroMes <= 12 && numeroMes > 8)
{
period = 6;
}
}
return period ;
}
tkns帮我。
答案 0 :(得分:4)
您可以使用整数除法的底数,这应该更快。
private int Period(DateTime date)
{
return (date.Month + 1) / 2;
}
但是四舍五入可能更容易理解。
private int Period(DateTime date)
{
return (int)Math.Ceiling(date.Month / 2.0);
}
答案 1 :(得分:3)
您可以计算周期,因为每个周期只有两个月。
如DaveShaw所指出的那样,由于DateTime是一种值类型,因此不能为null。因此不必检查日期是否为null。
private int Period(DateTime date)
{
// already an int, no need to convert
var month = date.Month;
if (month % 2 == 0)
return month / 2;
else
return (month + 1) / 2
}
这是A.S.的另一个更短的选择建议。
private int Period(DateTime date)
{
return (int)Math.Ceiling(date.Month / 2.0);
// or...
// return (date.Month + 1) / 2;
// but I prefer the Ceiling option since it is more obvious what is happening
}
或者,您也可以通过这种方式减少代码...
private int Period(DateTime date)
{
int month = date.Month;
if (month <= 2)
return 1;
else if (month <= 4)
return 2;
else if (month <= 6)
return 3;
else if (month <= 8)
return 4;
else if (month <= 10)
return 5;
else
return 6;
}
由于我使用return语句,因此每个if语句中都不需要第二个布尔值。
答案 2 :(得分:2)
正如其他人所说,这更适合https://codereview.stackexchange.com/,因为这不是问题的问题。
现在要对代码进行一些改进。
if(date!= null)
这将始终为true,因为DateTime是一个值类型(结构),不能为null。仅Nullable
int numeroMes = int.Parse(date.Month.ToString());
在这里,您将date.Month(一个int)转换为字符串,然后将其解析回int。日期,请不要这样做。Month已经是一个int了:
int numeroMes = date.Month;
到目前为止,其余的一切都还可以,但是我猜在这一行:
else if (numeroMes <= 12 && numeroMes > 8)
您真正的意思是numeroMes>10。尽管在此之前值9和10是匹配的,但这没什么区别。
最后,您可以将所有这些if简化为一个简单的公式:
return (int)Math.Ceiling(date.Month / 2.0);
Math.Ceiling将传递的十进制数字四舍五入到下一个整数。因此1.5将变成2。