2010-09-23 57 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; 
相关问题