2014-01-13 58 views
3

您能否解釋我應該如何避免此警告:Visual Studio 2010 Express中的「無法檢測到的代碼」?我正在從手冊中學習C#。 這是一個創建簡單方法的練習。我正如書中所寫的那樣精確地輸入例子。謝謝。檢測到無法檢測到的代碼C#(絕對初學者)

public class Multiply 
{ 
    //Multiplies argument by 4 

    public static int MultiplyBy4(int aNumber) 
    { 
     return 4 * aNumber; 
     //Shows ways of passing various arguments to a method public static void Main 
     int x = 7; 
     int y = 20; 
     int z = -3; 
     int result = 0; 

     result = MultiplyBy4(x); 
     Console.WriteLine("Passsing a variable, x : {0}", result); 

     result = MultiplyBy4(y + 2); 
     Console.WriteLine("Passing an expression, Y + 2: {0}", result); 

     result = 5 + MultiplyBy4(z); 
     Console.WriteLine("Using MultiplyBy4 in an expression: {0}", result); 
     Console.ReadLine(); 
    } 
} 

我不明白手冊解說: 「顯示傳遞各種參數的方法公共靜態無效的主要方式」創建一個帶有參數和返回值的方法之後。 如何使方法MultiplyBy4將x,y,z識別爲「aNumber」? 也許這是一個遲鈍的問題,但我卡在這裏。 謝謝。

+0

看起來他們希望您逐個評論各個部分,並逐個嘗試(並非全部)。返回'4 * aNumber'語句結束該方法,因此以下代碼永遠不會運行。從評論開始。 –

+2

我認爲你需要另一本手冊。這是一個可怕的例子。 –

+0

我試過評論,它沒有做任何事情。我同意這很可怕。直到這裏才行。現在它完全黑暗。 – user3190322

回答

4

return語句在這裏退出函數。 return語句後

所以在x,y,z和結果,以及Console.Write永遠不會運行的聲明...

+0

好的,我該如何解決它並讓它工作?如果我取消了回報,我沒有辦法,知道警告的原因並不能解決問題,因爲我的知識在這一點上是非常有限的。 – user3190322

+0

返回後面的所有內容應該位於Main(或至少在你的程序的主要功能)恕我直言,如果我理解你的鍛鍊。 – cubitouch

+0

我把所有的東西都在紅色,我認爲這將需要6個月才能達到這個底部。我會採用一種無方法的編程風格 – user3190322

0

任何語句不可達。它永遠不會被執行,編譯器會通知您。

它如果無法執行的語句編譯時警告,因爲它是不可達

Unreachable Statements MSDN

+0

它不是編譯時錯誤,它是一個編譯時間的警告,雖然我個人總是把警告看作是不是每個人都會犯的錯誤 – Chris

+0

這是一個編譯時*警告*,不是錯誤 –

+0

什麼都不會執行anywa年。這是我迄今爲止學到的。 – user3190322

0

這是因爲沒有辦法即會運行你的函數的每一行,因爲代碼你之前的一些代碼,你在你的函數有退出功能:

public class Multiply 
    { 
//Multiplies argument by 4 

      public static int MultiplyBy4(int aNumber) 
      { 
       return 4 * aNumber; // <---- You exit the function MultiplyBy4 here 

       // Everything beneath this line will never get executed 
       // -------------------------------------- 

//Shows ways of passing various arguments to a method public static void Main 
       int x = 7; 
       int y = 20; 
       int z = -3; 
       int result = 0; 

       result = MultiplyBy4(x); 
       Console.WriteLine("Passsing a variable, x : {0}", result); 

       result = MultiplyBy4(y + 2); 
       Console.WriteLine("Passing an expression, Y + 2: {0}", result); 

       result = 5 + MultiplyBy4(z); 
       Console.WriteLine("Using MultiplyBy4 in an expression: {0}", result); 
       Console.ReadLine(); 
      } 
} 

這是編譯器檢測什麼,並警告你了,因爲在大多數情況下,這是一個編碼錯誤。

如果您要移動return語句並在函數結尾退出函數,那麼您的代碼也會導致StackOverflow(如此諷刺,因爲我們在SO:P上)。通過調用MultiplyBy4(z);

,您正在導致一個永無止境的遞歸,這將導致處理器以100%的速度運行,並完全佔用保存函數調用的那部分內存。

0

由於cubitouch表示return語句會停止函數中的執行。

如果你有if語句,你可以有多個返回語句。但至少有一個返回語句必須處於可以從任何地方到達的功能(例如,沒有滿足任何條件)

通常返回語句是函數中的最後一個指令。

8

註釋行已混亂幷包含Main方法的定義。該代碼應爲:

public class Multiply 
{ 
     //Multiplies argument by 4 
     public static int MultiplyBy4(int aNumber) 
     { 
      return 4 * aNumber; 
     } 

     //Shows ways of passing various arguments to a method 
     public static void Main(string[] args) 
     { 
       int x = 7; 
       int y = 20; 
       int z = -3; 
       int result = 0; 

       result = MultiplyBy4(x); 
       Console.WriteLine("Passsing a variable, x : {0}", result); 

       result = MultiplyBy4(y + 2); 
       Console.WriteLine("Passing an expression, Y + 2: {0}", result); 

       result = 5 + MultiplyBy4(z); 
       Console.WriteLine("Using MultiplyBy4 in an expression: {0}", result); 
       Console.ReadLine(); 
      } 
} 
+0

不錯,但這使得問題脫離主題。 – Steve

+0

我按照你的說法寫下了它,但現在我有4個紅色的錯誤。我想拍自己的頭。 – user3190322

+0

你說得對。這是該方法的工作原理,現在我明白了。我打開了一個新項目,並從頭開始編寫所有內容。似乎我有太多或太少{{}}的問題。控制檯一次顯示所有結果。謝謝。 – user3190322