c#使用未赋值的局部变量(int)

本文关键字:局部变量 int 赋值 | 更新日期: 2023-09-27 17:54:49

我想知道我做错了什么,因为我正试图制作一个菜单,其中需要在预定义的值中一起计算三种不同的课程,但我似乎在做错误的转换,因为我似乎无法使其正常工作。

    int a, b, c;
    textBox4.Text = (a + b + c).ToString();
    if (comboBox1.Text == "Tzatziki")
    {
    a = 35;
    }
    else if (comboBox1.Text == "Carpaccio")
    {
    a = 40;
    }
    else if (comboBox1.Text == "Bruscetta")
    {
    a = 30;
    }
    else if (comboBox1.Text == "Shrimp Cocktail")
    {
    a = 40;
    }
    if (comboBox2.Text == "Sirloin")
    {
    b = 225;
    }
    else if (comboBox2.Text == "Lamb")
    {
    b = 195;
    }
    else if (comboBox2.Text == "Salmon")
    {
    b = 170;
    }
    else if (comboBox2.Text == "Veggy")
    {
    b = 100;
    }
    if (comboBox1.Text == "Chocolate Cake")
    {
    c = 45;
    }
    else if (comboBox1.Text == "Pancakes")
    {
    c = 35;
    }
    else if (comboBox1.Text == "Waffles")
    {
    c = 40;
    }
    else if (comboBox1.Text == "Sundae")
    {
    c = 38;
    }
}

非常感谢您的建议,对c#编程有点陌生:)

c#使用未赋值的局部变量(int)

给变量赋值并初始化它们:

int a = 0, b = 0, c = 0;

我认为你需要移动if / else-if语句的这一行:

textBox4.Text = (a + b + c).ToString();

在将整数转换为文本之前,需要给它一个初始值。

你得到零的原因是因为在你初始化变量(用零)之后,你立即使用它们。在这种意义上,if-then-else模式是无用的。


一个可能的解决方案是使用switch-case模式来简化编码和后,你计算a, bc,设置文本值:

int a = 0, b = 0, c = 0;
switch(comboBox1.Text) {
    case "Tzatziki" :
        a = 35;
        break;
    case "Carpaccio" :
        a = 40;
        break;
    case "Bruscetta" :
        a = 30;
        break;
    case "Shrimp Cocktail" :
        a = 40;
        break;
}
switch(comboBox2.Text) {
    case "Sirloin" :
        b = 225;
        break;
    case "Lamb" :
        b = 195;
        break;
    case "Salmon" :
        b = 170;
        break;
    case "Veggy" :
        b = 100;
        break;
}
switch(comboBox3.Text) {
    case "Chocolate Cake" :
        c = 45;
        break;
    case "Pancakes" :
    c = 35;
        break;
    case "Waffles" :
        c = 40;
        break;
    case "Sundae" :
        c = 38;
        break;
}
textBox4.Text = (a + b + c).ToString();

您甚至可能犯了c的错误,因为您再次使用了ComboBox1(我希望这应该是ComboBox3)。通过使用切换式结构,代码变得更加优雅。


代码的最后一个问题是,如果在组合框中没有输入值(或与您选中的值不同)该怎么办。在我上面写的情况下,值仍然是0(只有与ComboBox对应的值具有未知值)。您可以添加一个defaut : case,以便决定接下来要做什么。