首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化代码

优化代码
EN

Stack Overflow用户
提问于 2018-07-25 03:49:39
回答 3查看 88关注 0票数 0

在我的热情提高作为开发人员,我想知道我的代码是可能的改进,我在这方面是新手,并有非常小的逻辑

这是我的代码:

代码语言:javascript
复制
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 ;
}

感谢您的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-25 03:54:12

您可以计算周期,因为每个周期只有两个月。

正如DaveShaw指出的那样,不需要检查日期是否为null,因为DateTime是一个值类型,因此不能为null。

代码语言:javascript
复制
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.建议的另一个更短的选择。

代码语言:javascript
复制
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
}

或者,您也可以通过这种方式减少代码...

代码语言:javascript
复制
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语句中使用第二个bool。

票数 3
EN

Stack Overflow用户

发布于 2018-07-25 04:12:20

你可以使用整数除法的地板,这应该是更快的。

代码语言:javascript
复制
private int Period(DateTime date)
{
    return (date.Month + 1) / 2;
}

然而,四舍五入可能更容易理解。

代码语言:javascript
复制
private int Period(DateTime date)
{
    return (int)Math.Ceiling(date.Month / 2.0);
}
票数 4
EN

Stack Overflow用户

发布于 2018-07-25 04:12:53

正如其他人所说,这更适合https://codereview.stackexchange.com/,因为这不是一个问题。

现在对您的代码进行一些改进。

代码语言:javascript
复制
if(date!= null)

这总是正确的,因为DateTime是一个值类型(结构),它不能为空。只有Nullable/DateTime?可以为null。所以你可以简单的去掉它。

代码语言:javascript
复制
int numeroMes = int.Parse(date.Month.ToString());

在这里,您将date.Month (整型)转换为字符串,然后将其解析回整型。不要这样做,date.Month已经是一个整数了:

代码语言:javascript
复制
int numeroMes = date.Month;

到目前为止,其余的都还可以,但我猜是这样的:

代码语言:javascript
复制
else if (numeroMes <= 12 && numeroMes > 8)

你真正的意思是numeroMes > 10。虽然值9和10在这之前是匹配的,但这并没有区别。

最后,您可以将所有这些if缩短为一个简单的公式:

代码语言:javascript
复制
return (int)Math.Ceiling(date.Month / 2.0);

Math.Ceiling将传递的小数向上舍入为下一个整数。例如,1.5就变成了2。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51506498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档