2012-07-27 62 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瞭解一些基本信息。