2011-07-12 128 views
1

也许这是一个虚拟问题,但由于我不是C#专家,我认为使用较少的代码行可以更好地编写此函数。减小函数大小

这就是:

public void chgnav(string wt, string nav) 
    { 
     if (wt == "enable") 
     { 
      if (nav == "prev") 
      { 
       pictureBox7.Visible = true; 
       pictureBox9.Visible = false; 
      } 
      else 
      { 
       pictureBox8.Visible = true; 
       pictureBox10.Visible = false; 
      } 
     } 
     else 
     { 
      if (nav == "prev") 
      { 
       pictureBox7.Visible = false; 
       pictureBox9.Visible = true; 
      } 
      else 
      { 
       pictureBox8.Visible = false; 
       pictureBox10.Visible = true; 
      } 

     } 
    } 

编辑:感谢大家,从我upvotes。我得到了我正在寻找的东西。

+3

没有什么可怕的错误。这些类型的问题也有codereview.stackexchange.com。 – 2011-07-12 17:48:59

+1

考虑将其更改为“public void ShowNavigationUi(bool enableXXX,EnumNavType navType)”,并且不要尝试在ns中使用sms smr - 难以阅读并记住使用什么方法。 –

回答

6
public void chgnav(string wt, string nav) 
{ 
    bool wtEnabled = wt == "enable"; 
    if (nav == "prev") 
    { 
     pictureBox7.Visible = wtEnabled; 
     pictureBox9.Visible = !wtEnabled; 
    } 
    else 
    { 
     pictureBox8.Visible = !wtEnabled; 
     pictureBox10.Visible = wtEnabled; 
    } 
} 

编辑:固定

6

我认为,该方法的意图是明确的,而且执行是干净的。它可能比你想要的长几行,但为了几行代码而混淆是我书中的一个净损失。

我会保持它的样子。

+2

重命名变量“wt”和“nav”也不会是一件坏事,如果任何人(包括你未来的自己)会记住他们的意思...... –

+0

@bemused:约定...这会使意图更清晰。 – Mark

1

这可能工作:

public void chgnav(string wt, string nav) 
{ 
     if (nav == "prev") 
     { 
      pictureBox7.Visible = (wt=="enable"); 
      pictureBox9.Visible = (wt!="enable"); 
     } 
     else 
     { 
      pictureBox8.Visible = (wt=="enable"); 
      pictureBox10.Visible = (wt!="enable"); 
     } 
} 

甚至:

public void chgnav(string wt, string nav) 
{ 
    (nav=="prev" ? pictureBox7 : pictureBox8).Visible = (wt=="enable"); 
    (nav=="prev" ? pictureBox9 : pictureBox10).Visible = (wt!="enable"); 
} 
0

,对你有有限的范围内正常工作,但假设它是大10倍,并有更多的投入。

你想要的是一个'真值表'设置。

你有一个字典,需要一个对应于你的params的键。

给出PARAMS 'isBlue' 和 'isBig',你的字典键将

'FF' //没蓝或者大

'TF' //蓝色,但是没有大的

字典键会引导您获取一个值,该值是对象,属性名称及其值的映射。

所以你的地图可能是元组列表。哪里Tuple <对象,字符串,对象>,或者简单的一个结构。

然后你的代码会做一些ifs来组成键,从字典中得到元组列表或结构体,在列表中运行列表以对每个对象进行适当的操作。