减小函数大小

本文关键字:函数 | 更新日期: 2023-09-27 18:01:48

也许这是一个愚蠢的问题,但由于我不是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;
            }
        }
    }

编辑:感谢大家,我的支持。我找到我想要的了。

减小函数大小

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;
   }
}

编辑:固定

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

这可能行得通:

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");
}

对于有限的范围,这工作得很好,但假设它是10倍大,并且有更多的输入。

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

你有一个字典,它接受一个与参数相对应的键。

给定参数'isBlue'和'isBig',你的字典键将是

'ff'//不是蓝色或大

'tf'//蓝色但不大

等。

字典键指向一个值,该值是对象、属性名及其值的映射。

所以你的映射可以是一个tuple列表。其中Tuple<object、string、object>或仅仅是相同的结构体

然后你的代码会做一些if来组合键,从字典中获取元组或结构体的列表,运行列表来做适合每个对象的操作。