2010-09-23 79 views
0

我有我返回到使用對象不同方法的對象數組,但由於某種原因,它說:「不是所有的代碼路徑返回一個值」如何修復「不是所有的代碼路徑都返回一個值」?

下面的代碼....

private object[] runTests(string banText, object tabControlName, int runThisTest, string testName) 
    { 
     if (stopTests == false) 
     { 
      var tabPageBrowser = new TabPage(); 
      var Browser = new WebBrowser(); 

      (tabControlName as TabControl).TabPages.Add(tabPageBrowser); 
      tabPageBrowser.Name = tabControlName.ToString(); 
      tabPageBrowser.Text = testName; 
      tabPageBrowser.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, 
       System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
      Browser.Dock = DockStyle.Fill; 
      Browser.Url = new Uri(testStrings(runThisTest, banText)); 
      Browser.Name = tabControlName.ToString(); 
      Browser.ScriptErrorsSuppressed = true; 
      tabPageBrowser.Controls.Add(Browser); 

      try 
      { 
       while (Browser.ReadyState != WebBrowserReadyState.Complete) 
       { 
        Application.DoEvents(); 
       } 
      } 
      catch 
      { 
       return null; 
      } 
      IntPtr pHandle = GetCurrentProcess(); 
      SetProcessWorkingSetSize(pHandle, -1, -1); 

      object[] browserObjects = new object[2]; 
      browserObjects[0] = tabPageBrowser; 
      browserObjects[1] = Browser; 

      if (browserObjects != null) 
      { 
       return browserObjects;      
      } 
     } 
    } 

我沒有看到我做錯了什麼,你能協助嗎?謝謝!

+0

其中一個問題是圍繞browserObjects的if語句,它永遠不會爲null,而是在寫入語句時創建了一個不返回值的路徑。 – TheCodeKing 2010-09-23 19:07:47

回答

16

該方法不返回,如果

stopTests ==真

- 或 -

browserObjects == NULL

+3

...只是澄清 - C#中的每個方法返回一個值**必須**在每個代碼路徑的末尾都有一個顯式的'return'語句(或拋出的異常)。 – 2010-09-23 18:22:07

+1

@Michael:或者是一個無限循環;編譯器會將「while(true){}」視爲具有不可達的終點。實際上,通過將其表述爲:**非空方法的終點不可達**。 – 2010-09-23 19:08:30

+0

@Eric:是的,這有很大的邏輯意義,但我不確定方法的「終點」概念有多普遍。 – 2010-09-23 19:15:25

4

提示:嘗試找到沒有運行任何return的路徑。

1
return browserObjects;  

溝if語句。技術上,如果語句總是打擊,但編譯器也沒有這麼深(代碼合同會去深雖然)

4

返回值在所有代碼路徑

2

getter或訪問方法必須始終返回原始值或一個物體。

在你的榜樣你說

private object[] runTests(...) // Which means that no matter what, this method must return object[] or throw an exception 

比你有一個條件:

if(my_condition_is_met) 
{ 
do_some_processing(); 
} 

現在,如果條件不滿足,比你都不會返回任何東西,在當我們說過的第一行我們將返回對象數組。

原始的,但希望是有道理的......

2

在你的代碼,你沒有別的一部分,所以在這裏,我retrn空。

if (stopTests == false) 
    { 
     //your code 
    } 
    else 
     return null; 
相關問題