如何修复“并非所有代码路径都返回值”?

时间:2010-09-23 18:17:54

标签: c# arrays object

我有一个对象数组,我将返回使用不同方法中的对象,但由于某种原因,它说“并非所有代码路径都返回值”

这是代码....

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;                    
            }
        }
    }

我看不出我做错了什么,请你帮忙吗?谢谢!

6 个答案:

答案 0 :(得分:16)

如果

,该方法不会返回

stopTests == true

- 或 -

browserObjects == null

答案 1 :(得分:4)

提示:尝试查找未通过任何return的路径。

答案 2 :(得分:4)

在所有代码路径中返回一个值

答案 3 :(得分:2)

Getter或accessor方法必须始终返回原始值或对象。

在你的例子中,你说

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();
}

现在,如果不满足条件,那么你不会返回任何东西,当我们在第一行说我们将返回对象数组时。

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

答案 4 :(得分:2)

在您的代码中,您没有其他部分,所以我在这里返回null。

    if (stopTests == false) 
    {
        //your code 
    }
    else
        return null;

答案 5 :(得分:1)

return browserObjects;     

抛弃if语句。从技术上讲,如果语句总是命中,但编译器不会那么深(虽然代码契约会那么深)