我可以在if语句中创建对象的实例吗? 我已经制作了两个复选框以控制我使用的构造函数,但是我收到错误消息“名称”mth“在当前上下文中不存在”
if (checkBox1.Checked && checkBox2.Checked)
{
Facto mth = new Facto(label3, wait_time, progressBar1);
}
else if(checkBox1.Checked==false && checkBox2.Checked)
{
Facto mth = new Facto(label3,wait_time);
}
else if (checkBox1.Checked && checkBox2.Checked == false)
{
checkBox1.Checked = false;
Facto mth = new Facto();
}
else
{
Facto mth = new Facto();
}
int result = mth.Factorial(number);
我做错了什么?我是C#的新手,我还没有真正掌握它。 任何帮助,将不胜感激。 提前谢谢。
答案 0 :(得分:1)
这是一个范围问题。变量mth仅存在于其定义的范围(在您的情况下为括号)中。一旦离开范围,变量就不再可用。由于您在代码末尾使用mth
变量(并且在范围之外),因此会出现此错误。为了解决这个问题,您需要在更高的范围内定义变量。请注意,您不必在那里分配它。
这会产生类似的结果(请注意,我重新格式化了括号以便更容易查看范围级别)
Facto mth; // Define it as the most outer scope level you are using it
if (checkBox1.Checked && checkBox2.Checked)
{
mth = new Facto(label3, wait_time, progressBar1);
}
else
if(checkBox1.Checked==false && checkBox2.Checked)
{
mth = new Facto(label3,wait_time);
}
else
if (checkBox1.Checked && checkBox2.Checked == false)
{
checkBox1.Checked = false;
mth = new Facto();
}
else
{
mth = new Facto();
}
int result = mth.Factorial(number);
编辑:我建议总是在每个if和else上使用{}括号,即使它们并非像你的情况那样严格要求。正如你在布局中看到的那样,看到你的第一个结束的地方并不是那么容易,并且“int结果行不是它的一部分。
答案 1 :(得分:0)
这里的问题不是在if块中创建实例。 第m个引用在if / else块中声明。这仅将可见性/范围限制为该块。所以当你尝试在行中引用它时,mth不可用int result = mth.Factorial(number);
只需在if块之外声明mth,并仅在if / else块中实例化。 例如:
Facto mth;
if (checkBox1.Checked && checkBox2.Checked)
{
mth = new Facto(label3, wait_time, progressBar1);
}
...
请参阅http://msdn.microsoft.com/en-us/library/aa691132(v=vs.71).aspx了解一些基本信息。