这个C#代码有什么问题?
请告诉我什么是错这个C#代码..这个C#代码有什么问题?
public bool CloseCOMPort()
{
try
{
bool isClosed = false;
if (oSerialPortMisc != null && oSerialPortMisc.IsOpen)
{
oSerialPortMisc.Close();
isClosed=true;
}
else
{
isClosed = false;
}
return isClosed;
}
catch (Exception exp)
{
}
}
当我编译此代码提示错误。“并非所有的代码路径返回一个值”。 我不知道这里错了。 PLease help .. Thanxxx ... :)
更具体。如果该方法不是void,则代码中的每个叉必须返回适当的值或抛出。在你的情况下,catch fork没有执行上述任何操作,并且你的代码不能编译。
该方法并不总是返回一个值。
你的编译器应该告诉你同样的事情。
值(isClosed
)仅在try { .. }
块中返回。现在,想象一下,如果在返回语句之前失败(抛出异常),代码将继续在catch { .. }
中返回任何内容,这就是为什么代码无法编译的原因。
您应该在方法的底部放置一个return
声明。
定义isClosed
位于方法的顶部,并将其返回到底部,无论如何。
public bool CloseCOMPort()
{
bool isClosed = false;
try { .. }
catch { .. }
return isClosed;
}
在catch中没有return语句。
试试这个:
public bool CloseCOMPort()
{
try
{
bool isClosed = false;
if (oSerialPortMisc != null && oSerialPortMisc.IsOpen)
{
oSerialPortMisc.Close();
isClosed=true;
}
else
{
isClosed = false;
}
return isClosed;
}
catch (Exception exp)
{
return false;
}
}
谢谢Jeff,TJHeuvel :) – himanshu 2011-06-14 12:11:02
你的方法必须指定在任何情况下返回值。 尝试:
public bool CloseCOMPort()
{
bool isClosed = false;
try
{
if (oSerialPortMisc != null && oSerialPortMisc.IsOpen)
{
oSerialPortMisc.Close();
isClosed=true;
}
else
{
isClosed = false;
}
}
catch (Exception exp)
{
}
return isClosed;
}
ü必须始终返回布尔试试这个:
public bool CloseCOMPort()
{
bool isClosed = false;
try
{
if (oSerialPortMisc != null && oSerialPortMisc.IsOpen)
{
oSerialPortMisc.Close();
isClosed=true;
}
}
catch (Exception exp)
{
}
return isClosed;
}
不一定。他可以抛弃这个漏洞,代码仍然很好。检查我的答案。 – 2011-06-14 12:00:53
如果发生预期情况,您可能会进入try
/catch
区块。
这将意味着yoru函数永远不会返回一个值。 C#编译器足够聪明地发现这一点。
如果发生异常,则该方法不会返回值。
移动的isClosed
声明的try
块外,并添加:
finally
{
return isClosed;
}
您还可以简化您的代码:
public bool CloseCOMPort()
{
bool isClosed = false;
try
{
if (oSerialPortMisc != null && oSerialPortMisc.IsOpen)
{
oSerialPortMisc.Close();
isClosed = true;
}
}
catch (Exception exp)
{
// Add some logging of the exception here
}
finally
{
return isClosed;
}
}
这也是不好的做法catch基本Exception
。您应该只捕获您调用的方法抛出的异常。
使用finally
块可确保即使您决定重新抛出您陷入的任何异常或决定不捕获异常,也能执行该代码。
+1:在所有答案中,这是唯一一个以某种方式实际处理捕获到的异常的人。 (即使这只是一条建议OP处理它的评论,我在问题中注意到的第一件事情不是'catch'中没有返回,而是'catch'中缺少_anything_。 – David 2011-06-14 12:16:01
您在try块内返回isClosed
,并且不在catch块中返回任何内容。所以,如果发生任何异常,你的函数将不会返回任何东西。
建议:您可以在catch块上返回false
。
你会得到什么错误信息?你想做什么? – TJHeuvel 2011-06-14 11:58:28
也许你可以评估你想在其中找到什么错误的部分? – ub1k 2011-06-14 11:58:48
您收到哪些错误?是否有任何异常被抛出?有没有不是你所期望的行为?你是否试图同时使用这段代码?在我怀疑的这种情况下,一些更多的信息将有助于提供更明确的答案。 – 2011-06-14 11:59:32