C#:重构雷诺数计算器

时间:2009-01-03 03:01:33

标签: c# refactoring

我正在尝试在周末学习一些C#,并遵循此处的15个练习:http://www.jobsnake.com/seek/articles/index.cgi?openarticle&8533

昨天我问了一个关于Fibonacci序列的类似问题并得到了一些很好的回答,它们向我介绍了我以前没有遇到的C#元素: Refactoring Fibonacci Algorithm

今天我想看看C#Jedi如何重构以下代码:

static string Reynolds(int d, int v, int rho, int mu)
{
    int number = (d*v*rho) / mu;
    if (number < 2100) return "Laminar Flow";
    else if (number < 2100 && number < 4000) return "Transient Flow";
    else return "Turbulent Flow";
}

比昨天更简单,但有没有很好的方法来处理多个条件?

此致

克里斯

2 个答案:

答案 0 :(得分:6)

我认为您的代码中存在错误,但我做了一个假设。你的第二个“如果”永远不会将树评估为数字&lt; 2000已经使第一个分支成立了。

我会创建一个ENUM:

enum FlowType
{
    Laminar
    , Transient
    , Turbulent
};


static FlowType Reynolds(int d, int v, int rho, int mu)
{
    int n = (d*v*rho) / mu;

    if(n < 2000)
    {
        return FlowType.Laminar;
    }
    else if(n < 4000)
    {
        return FlowType.Transient;
    }
    else
    {
        return FlowType.Turbulent;
    }
}

答案 1 :(得分:3)

使用C#三元运算符

   static string Reynolds(int d, int v, int rho, int mu)
    {        
       int number = (d*v*rho) / mu; 
       return number <  2100? "Laminar Flow":
              number >= 4000? "Turbulent Flow":
                              "Transient Flow";
    }

或者,(为了让我的讽刺方面有点自由),如果你发现这不是 可读 ,你可以添加评论,使其成为 更多 可读,

static string Reynolds(int d, int v, int rho, int mu)
{        
   int number = (d*v*rho) / mu; 
   return /*IF*/ number <  2100? /*Then*/ "Laminar Flow":
          /*IF*/ number >= 4000? /*Then*/ "Turbulent Flow":
                                 /*Else*/ "Transient Flow";
}

有人真的认为这有帮助吗?