C# 我声明了一个变量,不能在switch语句中使用它
我在修改switch语句之外的其他变量时遇到问题-例如,rite,左C# 我声明了一个变量,不能在switch语句中使用它,c#,.net,scope,switch-statement,C#,.net,Scope,Switch Statement,我在修改switch语句之外的其他变量时遇到问题-例如,rite,左 每次我尝试编译代码时,它都会显示错误消息“名称'left'在当前上下文中不存在”。整数rite也是如此。rite和left只能在声明它们的范围内访问,即在try块内 你需要这样做 string gr = comboBox1.ValueMember; decimal sum = 0M; try { decimal rite = Convert.ToDecimal(textBox1.Text); decimal l
每次我尝试编译代码时,它都会显示错误消息“名称'left'在当前上下文中不存在”。整数rite也是如此。rite和left只能在声明它们的范围内访问,即在try块内 你需要这样做
string gr = comboBox1.ValueMember;
decimal sum = 0M;
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 = rite * left;
break;
case "/":
break;
case "*":
break;
case "-":
break;
default:
break;
}
answerText.Text = Convert.ToString(sum);
尽管这还不够,因为如果引发异常,您必须决定在rite和left中需要什么值。rite和left只能在声明它们的范围内(即在try块内)访问 你需要这样做
string gr = comboBox1.ValueMember;
decimal sum = 0M;
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 = rite * left;
break;
case "/":
break;
case "*":
break;
case "-":
break;
default:
break;
}
answerText.Text = Convert.ToString(sum);
尽管这还不够,因为如果抛出异常,您必须决定在rite和left中需要什么值。rite和left是try语句内部的本地值。您需要在try语句外部声明它们,然后在内部分配它们的值 例如
rite和left是try语句内部的局部变量。您需要在try语句外部声明它们,然后在内部分配它们的值 例如
是的,因为您在try/catch块的范围内声明了
rite
(我认为您的意思是“right”…)和left
。如果对Convert.ToDecimal
的第一次调用失败,会发生什么?那么,rite
从来没有被分配过,left
甚至从来没有被声明过。您需要将它们提升到一个级别,并在try/catch之外声明它们。只需在try块中执行赋值
除此之外,如果出现错误,您应该退出该函数,因为后面的代码希望
rite
和left
有效,如果catch处理程序执行,它们就不会有效。是的,因为您已声明rite
(我认为您的意思是“right”…)在try/catch块的作用域内左和。如果对Convert.ToDecimal
的第一次调用失败,会发生什么?那么,rite
从来没有被分配过,left
甚至从来没有被声明过。您需要将它们提升到一个级别,并在try/catch之外声明它们。只需在try块中执行赋值
除此之外,如果出现错误,您应该退出该函数,因为后面的代码预期rite
和left
有效,如果catch处理程序执行,它们就不会出现。left
和rite
仅存在于try
代码块中。left
和rite
仅存在于try
代码块中。将“rite”和“left”的声明与gr和sum放在一起。将“rite”和“left”以及gr和sum。它们在try
块中声明,因此其范围为
另外,当try
块中出现异常时,您希望它们中的任何一个是什么?
它们需要初始化。(我假设您可以使用零作为默认值。)
将它们移出:
string gr = comboBox1.ValueMember;
decimal sum = 0M;
decimal rite= 0M;
decimal left= 0M;
try
{
rite = Convert.ToDecimal(textBox1.Text);
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 = rite * left;
break;
case "/":
break;
case "*":
break;
case "-":
break;
default:
break;
}
answerText.Text = Convert.ToString(sum);
}
另外,保存一个字符(rite
而不是right
)确实不值得努力。它们是在try
块中声明的,因此被限定在它的范围内。
另外,当try
块中出现异常时,您希望它们中的任何一个是什么?
它们需要初始化。(我假设您可以使用零作为默认值。)
将它们移出:
string gr = comboBox1.ValueMember;
decimal sum = 0M;
decimal rite= 0M;
decimal left= 0M;
try
{
rite = Convert.ToDecimal(textBox1.Text);
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 = rite * left;
break;
case "/":
break;
case "*":
break;
case "-":
break;
default:
break;
}
answerText.Text = Convert.ToString(sum);
}
另外,保存一个字符(rite
而不是right
)确实不值得这么做。您在try语句中声明了left和right,因此它们不存在于try语句之外
string gr = comboBox1.ValueMember;
decimal left = 0M, right = 0M, sum = 0M; // assuming you want zeroes by default
try
{
right = Convert.ToDecimal(textBox1.Text);
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 = right * left;
break;
case "/":
break;
case "*":
break;
case "-":
break;
default:
break;
}
这是正确的答案。
它被称为变量范围。您在try语句中声明left和right,因此它们不存在于try语句之外
string gr = comboBox1.ValueMember;
decimal left = 0M, right = 0M, sum = 0M; // assuming you want zeroes by default
try
{
right = Convert.ToDecimal(textBox1.Text);
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 = right * left;
break;
case "/":
break;
case "*":
break;
case "-":
break;
default:
break;
}
这是正确的答案。
它被称为变量范围。左侧的两个变量rite被声明为本地变量,仅用于try块,switch块无法访问它
您应该声明这两个块可以访问它们
decimal rite;
decimal left;
try
{
rite = Convert.ToDecimal(textBox1.Text);
left = Convert.ToDecimal(textBox2.Text);
}
catch (Exception)
{
string swr = "Please enter REAL a number, can be with decimals";
label2.Text = swr;
}
rite,left这两个变量被声明为仅用于try块的本地变量,switch块无法访问它
您应该声明这两个块可以访问它们
decimal rite;
decimal left;
try
{
rite = Convert.ToDecimal(textBox1.Text);
left = Convert.ToDecimal(textBox2.Text);
}
catch (Exception)
{
string swr = "Please enter REAL a number, can be with decimals";
label2.Text = swr;
}
包括try块内的所有逻辑(开关)或将变量声明移到try块外。包括try块内的所有逻辑(开关)或将变量声明移到try块外。请不要将“C#“在标题前面,表示它是关于C的。这就是我们在这里使用标记的原因。有一个提示:拼写正确,而不是礼仪:请不要在标题前加上“C”,表示它是关于C的。这就是我们在这里使用标记的原因。一个提示拼写正确,而不是rite:p这段代码有点错误left
和right
在try
-catch
之外使用,当您到达开关时,它们可能未初始化。声明时需要初始化。我猜catch中可能应该有一个return语句,以防止其余的计算发生。这段代码有点错误left
和right
在try
-catch
之外使用,当您到达开关时,它们可能未初始化。初始化在声明时是必要的。我猜在catch中可能应该有一个return语句来防止其余的计算发生。