优化代码

时间:2018-07-24 19:49:39

标签: c# asp.net

我热衷于作为开发人员进行改进,我想知道我的代码有可能改进,对此我是新手,逻辑也很小

这是我的代码:

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帮我。

3 个答案:

答案 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 / DateTime?可以为null。因此,您只需删除它即可。

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。

相关问题