如何修复“不是所有的代码路径都返回一个值”?
我有我返回到使用对象不同方法的对象数组,但由于某种原因,它说:“不是所有的代码路径返回一个值”如何修复“不是所有的代码路径都返回一个值”?
下面的代码....
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;
}
}
}
我没有看到我做错了什么,你能协助吗?谢谢!
该方法不返回,如果
stopTests ==真
- 或 -
browserObjects == NULL
...只是澄清 - C#中的每个方法返回一个值**必须**在每个代码路径的末尾都有一个显式的'return'语句(或抛出的异常)。 – 2010-09-23 18:22:07
@Michael:或者是一个无限循环;编译器会将“while(true){}”视为具有不可达的终点。实际上,通过将其表述为:**非空方法的终点不可达**。 – 2010-09-23 19:08:30
@Eric:是的,这有很大的逻辑意义,但我不确定方法的“终点”概念有多普遍。 – 2010-09-23 19:15:25
提示:尝试找到没有运行任何return
的路径。
return browserObjects;
沟if语句。技术上,如果语句总是打击,但编译器也没有这么深(代码合同会去深虽然)
返回值在所有代码路径
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();
}
现在,如果条件不满足,比你都不会返回任何东西,在当我们说过的第一行我们将返回对象数组。
原始的,但希望是有道理的......
在你的代码,你没有别的一部分,所以在这里,我retrn空。
if (stopTests == false)
{
//your code
}
else
return null;
其中一个问题是围绕browserObjects的if语句,它永远不会为null,而是在写入语句时创建了一个不返回值的路径。 – TheCodeKing 2010-09-23 19:07:47