也许这是一个虚拟问题,但由于我不是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;
}
}
}
修改:感谢所有人,我的赞成。我得到了我想要的东西。
答案 0 :(得分: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;
}
}
修改:修复
答案 1 :(得分:6)
我认为该方法的意图是明确的,并且实现是干净的。它可能比你想要的长几行,但为了几行代码的混淆是我书中的净损失。
我会保持原样。
答案 2 :(得分: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");
}
答案 3 :(得分:0)
这适用于您所拥有的有限范围,但假设它大10倍且输入更多。
你想要的是一个'真值表'设置。
你有一个字典,其中包含与你的参数对应的密钥。
给定params'isBlue'和'isBig',你的字典键将是
'ff'//不是蓝色或大
'tf'//蓝色但不大
等
字典键会引导您获取对象,属性名称及其值的映射值。
所以你的地图可能是一个元组列表。其中元组< object,string,object>或简单的结构。
然后你的代码会做一些ifs来组成密钥,从字典中获取元组列表或结构,在列表中运行以执行适合每个对象的操作。