考虑这个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。礼,离开;
答案 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而不指定