2012-07-27 58 views
1

我可以在if语句中创建对象的实例吗? 我为了CONTROLL我用它构造了2个复选框,但我得到的错误消息“名‘MTH在C#中if中创建对象的实例

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#的新手,但我还没有掌握它。 任何帮助,将不胜感激。 在此先感谢。

回答

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); 

编辑:我会建议,如果和其他人甚至始终使用{}上的每个支架如果他们不是像你的情况那样严格要求的话。正如你在布局中看到的那样,看到你的第一个else结尾并不容易,并且“int结果行不是它的一部分”

+0

非常感谢,它的工作。 – robertpas 2012-07-27 09:34:28

+0

更重要的是:你明白为什么吗? – Eddy 2012-07-27 09:38:59

0

这里的问题是在块内部没有创建实例 第mth引用是在if/else块中声明的,这限制了可见性/作用域仅限于该块,所以当你尝试在行中引用它时,mth不可用; int result = mth.Factorial(number);

Just declare第m个IF块外唯一实例中的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了解一些基本信息。