有没有我可以使用数组或其他东西来减少代码在这里?

时间:2013-12-08 00:26:05

标签: c# arrays if-statement

我有7个单选按钮和5个复选框。这是用于选择第一个单选按钮并选择第一个复选框以及其他复选框的代码。这仅在选中第一个复选框时有效。这意味着我已经为每个复选框重新创建了这个。对于第一个单选按钮,这是有意义的。我意识到这样做只会是一大堆代码。它有用,但它非常非常草率。

所以,我想知道是否有某种方法可以在数组或其他内容中执行此操作?我只是想缩短这个很多。任何有关这方面的帮助将不胜感激。谢谢。

if (radBrick.Checked)
{
    intBrick = 100000;
    intTotal = intBrick;

    if (chkBasketball.Checked)
    {
        intBasketball = 50000;
        intTotal = intBrick + intBasketball;

        if (chkFire.Checked)
        {
            intFire = 500;
            intTotal = intBrick + intBasketball + intFire;

            if (chkMarble.Checked)
            {
                intMarble = 20000;
                intTotal = intBrick + intBasketball + intFire + intMarble;

                if (chkSteel.Checked)
                {
                    intStain = 10000;
                    intTotal = intBrick + intBasketball + intFire + intStain + intMarble;

                    if (chkGarage.Checked)
                    {
                        intGarage = 5000;
                        intTotal = intBrick + intBasketball + intFire + intStain + intMarble + intGarage;
                    }
                }
            }
        }
    }

    lblTotal.Text = intTotal.ToString("C");
}

4 个答案:

答案 0 :(得分:6)

是的,你可以 - 这是如何:

int[] add = new[] {100000, 50000, 500, 20000, 10000, 50000};
bool[] check = new[] {radBrick.Checked, chkBasketball.Checked, chkFire.Checked, chkMarble.Checked, chkSteel.Checked, chkGarage.Checked};
int sum = 0;
for (int i = 0 ; i != add.Length ; i++) {
    if (check[i]) {
        sum += add[i];
    }
}

答案 1 :(得分:2)

尝试将Checked属性转换为0或1 int值,并将该值乘以固定数字并添加所有内容。或多或少是这样的:

intBrick = 100000;
intBasketball = 50000;
intFire = 500;
intMarble = 20000;
intStain = 10000;
intGarage = 5000;

intTotal = (radBrick.Checked ? 1 : 0) * (intBrick +
           (chkBasketball.Checked ? 1 : 0) * (intBasketball +
           (chkFire.Checked ? 1 : 0) * (intFire +
           (chkFire.Checked ? 1 : 0) * (intMarble +
           (chkStain.Checked ? 1 : 0) * (intStain +
           (chkGarage.Checked ? 1 : 0) * intGarage)))));

答案 2 :(得分:0)

假设要求将所有值的检查状态设置为true,则可以将CheckBox'及其对应的值放入字典中,然后使用LINQ对值求和:

var dic = new Dictionary<CheckBox, int>
{
    { chkBasketball, 50000 },
    { chkFire, 500 },
    { chkMarble, 20000 },
    { chkSteel, 10000 },
    { chkGarage, 5000 },
};

int sum = dic.Where( x => x.Key.Checked ).Sum( x => x.Value );

答案 3 :(得分:0)

这是我的方法。

int CalculateTotal (RadioButton radioButton, int currentTotal)
{
    if (radioButton.Checked)
        return 0;

    var elements = new[]
        {
            new
                {
                    CheckBoxButton = chkFire,
                    Value = 50000
                },

            new
                {
                    CheckBoxButton = chkMarbled,
                    Value = 500
                }

            // and so on
        };

    return currentTotal + elements.TakeWhile(x => x.CheckBoxButton.Checked).Sum(x => x.Value);
}

并为每个单选按钮,您将其用作

  lblTotal.Text = CalculateTotal(chkBasketBall , 50000).ToString();