2012-06-28 111 views
0

早上,簡單的愚蠢的問題。我發現有類似問題的帖子,但通讀後並不能解決我的錯誤。返回值從循環內不顯示

Return value from For loop

Can't get a return value from a foreach loop inside a method

的方法:METH1 meth2 ECT ....所有返回一個值,但此刻我正在錯誤

「錯誤1「Proj5.Program.meth1 (int)':不是所有的代碼路徑都會爲每個方法返回一個值「。

我的邏輯推測是它沒有看到循環內的值? ...

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Proj5 
{ 
class Program 
{ 
    static void Main() 
    { 
     for (int i = 1; i < 101; i++) 
     { 
      if (i == 3 || 0 == (i % 3) || 0 == (i % 5) || i == 5) 
      { 
       Console.Write(meth1(i)); 
       Console.Write(meth2(i)); 
       Console.Write(meth3(i)); 
       Console.Write(meth4(i)); 
      } 
      else 
      { 
       Console.Write(TheInt(i)); 
      } 
     } 
     Console.ReadLine(); 
    } 

    static string meth1(int i) 
    { 
     string f = "fuzz"; 

     if (i == 3) 
     { 
      return f; 
     } 
    } 
    static string meth2(int i) 
    { 
     string f = "fuzz"; 

     if (0 == (i % 3)) 
     { 
      return f; 
     } 
    } 
    static string meth3(int i) 
    { 
     string b = "buzz"; 

     if (i == 5) 
     { 
      return b; 
     } 

    } 
    static string meth4(int i) 
    { 
     string b = "buzz"; 

     if (0 == (i % 5)) 
     { 
      return b; 
     } 
    } 
    static int TheInt(int i) 
    { 
     return i; 
    } 

} 
} 

回答

3

你說你的方法應該返回一個字符串,但如果我<> 3,你不說什麼應該返回。方法2和方法3具有相同的問題,順便說一句(也是4)。 我不會對方法的INT,這是......搞笑說話;)

修正

static string meth1(int i) 
    { 
     string f = "fuzz"; 

     if (i == 3) 
     { 
      return f; 
     } 
     return null;//add a "default" return, null or string.Empty 
    } 

或更短

static string meth1(int i) { 
    return (i == 3) ? "fuzz" : null/*or string.Empty*/; 
} 
+0

你只需給它一個空在它的位置?如果可能的話,我想知道背後的邏輯。 – Dan

+1

返回'string'的方法必須*總是*返回'string'或拋出異常。你的代碼不會返回任何東西,除非'if'評估爲真。這解決了如果'if'評估爲false則返回null。 –

+0

聽起來不錯,很有道理!感謝您的小凹凸=) – Dan

0

你的函數只返回時,如果被評估爲真。在if語句外添加return語句,或添加else語句,並且您的代碼將被編譯和工作。

static string meth2(int i) 
{ 
    string f = "fuzz"; 

    if (0 == (i % 3)) 
    { 
     return f; 
    } 
    else 
     return ""; 
} 
0

當你聲明一個返回值的方法(如meth1等)時,你應該遵守這個聲明。

如果內部條件不符合,您的方法不會返回任何內容。 編譯器注意到這一點,並與你一起投訴

你應該確保每一個可能的執行路徑都將被調用的方法返回給調用者。

例如

static string meth3(int i)  
{   
    string b = "buzz";   
    if (i == 5)   
    {    
     return b;   
    }  
    // What if the code reaches this point? 
    // What do you return to the caller? 
    return string.Empty; // or whatever you decide as correct default for this method 
}