当我执行以下函数时,出现错误:
“错误'Excel1.WebServiceFunctions.CreateMyTask()': 并非所有代码路径都返回值
我的代码:
public int CreateMyTask()
{
try
{
Console.WriteLine("Invoking CreateTask method");
Console.WriteLine("-----------------------------------");
m_taskID = taskClient.CreateTask(m_tInstance);
Console.WriteLine("Task create successfully:ID=" + m_taskID.ToString());
Console.WriteLine("-----------------------------------");
return m_taskID;
}
catch (Exception ex)
{
MessageBox.Show("An exception has occured. Please check the Excel sheet for more info" + ex);
}
finally
{
GC.Collect();
}
}
关于我如何能够支持这一点的任何想法?我做了一些谷歌搜索,但我无法完全归零
答案 0 :(得分:5)
<强>原因强>
考虑这种情况。
在try块中的返回行之前的代码行中发生错误。然后它将进入catch show messagebox然后在最后然后返回什么?????它必须返回一些原因,方法返回类型是int。
<强>解决方案强>
这样做
finally
{
GC.Collect();
}
return m_taskID;
}
答案 1 :(得分:4)
从catch块返回0或任何其他int值,它将解决此问题。在您的调用方法中,您必须将int值理解为异常。
答案 2 :(得分:2)
如果代码中有错误,它将跳转到catch块并且永远不会返回。您需要将返回值放在try catch块之外。
public int CreateMyTask()
{
int value = -1;
try
{
Console.WriteLine("Invoking CreateTask method");
Console.WriteLine("-----------------------------------");
m_taskID = taskClient.CreateTask(m_tInstance);
Console.WriteLine("Task create successfully:ID=" + m_taskID.ToString());
Console.WriteLine("-----------------------------------");
value = m_taskID;
}
catch (Exception ex)
{
MessageBox.Show("An exception has occured. Please check the Excel sheet for more info" + ex);
}
finally
{
GC.Collect();
}
return value;
}
答案 3 :(得分:1)
在catch部分写一个return -1
,你可以从调用方法中找到它。
答案 4 :(得分:1)
使用返回值可以轻松修复此问题。
public int CreateMyTask()
{
int returnValue = -1;
try
{
Console.WriteLine("Invoking CreateTask method");
Console.WriteLine("-----------------------------------");
m_taskID = taskClient.CreateTask(m_tInstance);
Console.WriteLine("Task create successfully:ID=" + m_taskID.ToString());
Console.WriteLine("-----------------------------------");
returnValue = m_taskID;
}
catch (Exception ex)
{
MessageBox.Show("An exception has occured. Please check the Excel sheet for more info" + ex);
returnValue = -1; // Shouldn't be necessary but the compiler likes it
}
finally
{
GC.Collect();
}
return returnValue;
}
答案 5 :(得分:1)
出现问题时,您需要返回int
。
当抛出异常时,您的当前实现不会返回int
。
catch (Exception ex)
{
MessageBox.Show("An exception has occured. Please check the Excel sheet for more info" + ex);
return someDefautOrErrorValue; // <- add return statement here
}
finally
{
GC.Collect();
}
return someDefautOrErrorValue; // <- or alternately here.
}
答案 6 :(得分:1)
消息“并非所有代码路径都返回一个值”非常清楚:您声明该方法返回一些内容,因此代码中的每个可能路径都应以return
的适当值结束。有一个例外(nu pun意图):代码路径也可以以异常结束。
通过代码的一条路径是没有任何例外的路径。然后代码到达try
块中的最后一个语句,这是一个return
- 很好。
如果发生异常现在怎么办?控件传递给catch
块,没有返回任何内容!这就是编译器抱怨的内容。所以要么抛出异常,要么返回“某事”。请注意,“某些东西”应告诉调用者此方法“出错了”。
答案 7 :(得分:0)
问题非常简单 - 并非所有代码路径都会导致返回。例如,假设如果try子句中的Console.WriteLine出现错误,则不会返回任何内容,因为一旦发现错误,try子句就会结束,并继续执行catch。
要解决此问题,您可以在catch {}子句中添加一个返回值,以便在出现错误时发送返回:
catch (Exception ex)
{
MessageBox.Show("An exception has occured. Please check the Excel sheet for more info" + ex);
return -1;
}
您可以真正使用任何返回错误。惯例使用-1,因为你通常不会将其作为主句的回报。
或者,你可以在整个子句的finally / outside之外添加两者的返回值,因为所有对代码的调用都将返回一个值。
希望有所帮助!