我在C#中声明了一个变量,不能在switch语句中使用它

时间:2011-08-01 21:35:16

标签: c# variables scope switch-statement local

考虑这个C#代码:

string gr = comboBox1.ValueMember;
decimal sum;
try
{
    decimal rite = Convert.ToDecimal(textBox1.Text);
    decimal left = Convert.ToDecimal(textBox2.Text);
}
catch (Exception)
{
    string swr = "Please enter REAL a number, can be with decimals";
    label2.Text = swr;
}

switch (gr)
{
    case "X":
        sum = 12M;
        break;
    case "/":
        break;
    case "*":
        break;
    case "-":
        break;
    default:
        break;
}

answerText.Text = Convert.ToString(sum);

如果我在switch语句中给小数sum一个值,它会弹出一个错误语句说:

  

使用未分配的局部变量'sum'

我是C#的新手所以这可能听起来很愚蠢。看起来我ALREADY在switch语句中设置了sum的值。我尝试在所有其他案例陈述中使用相同的sum = 12M;,但这似乎没有帮助。

顺便说一句,即使在修改switch语句之外的其他变量时,我也遇到了问题 - EX。礼,离开;

7 个答案:

答案 0 :(得分:7)

如果gr不等于“X”sum没有价值。编译器会警告你。

答案 1 :(得分:3)

只有instance variables获取默认值,因此像sum这样的本地变量必须为initialized,才能在其他地方使用。由于它可能不会被分配任何东西,编译器会引发错误。

答案 2 :(得分:1)

您只为一个条件设置sum的值,因此当您尝试将其转换为字符串时,它不会始终分配。尝试将其声明为decimal sum = 0.0;

答案 3 :(得分:1)

编译器检测到存在不会分配变量的执行路径。如果gr不是X,则在switch语句后将使用未分配的值。

您只需将初始值添加到声明:

decimal sum = 0m;

答案 4 :(得分:1)

这是因为只有在switch语句遇到“X”情况时才会分配变量sum。要解决此问题,请通过在顶部执行以下操作来设置默认值:

decimal sum = 0m;

答案 5 :(得分:0)

在声明时简单地为其指定默认值,您将不会收到错误:

decimal sum = 0;

答案 6 :(得分:0)

声明时你应该使用:

decimal sum=0m;

编译器不能确保第一种情况会保留,因此仍然可以使用sum而不指定