请告诉我这个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)
{
}
}
当我编译这段代码时,它会给出错误..“并非所有代码路径都返回一个值”。 我不知道这里的错误。请帮忙.. Thanxxx ...:)
答案 0 :(得分:8)
该方法并不总是返回值。 你的编译器应该告诉你同样的事情。
值(isClosed
)仅在try { .. }
块中返回。现在,想象一下如果某些内容在返回到return语句之前失败(抛出异常),代码将继续在catch { .. }
中继续返回,这就是你的代码无法编译的原因。
您应该在方法的底部放置return
语句。
定义方法顶部的isClosed
,无论如何都将其返回到底部。
public bool CloseCOMPort()
{
bool isClosed = false;
try { .. }
catch { .. }
return isClosed;
}
答案 1 :(得分:4)
您的方法必须在每种情况下指定返回值。 尝试:
public bool CloseCOMPort()
{
bool isClosed = false;
try
{
if (oSerialPortMisc != null && oSerialPortMisc.IsOpen)
{
oSerialPortMisc.Close();
isClosed=true;
}
else
{
isClosed = false;
}
}
catch (Exception exp)
{
}
return isClosed;
}
答案 2 :(得分:4)
如果引发异常,则该方法不会返回值。
将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;
}
}
抓住基地Exception
也是不好的做法。您应该只捕获您调用的方法抛出的异常。
使用finally
块确保即使您决定重新抛出陷阱中的任何异常,或者决定不捕获异常,也可以执行代码。
答案 3 :(得分:3)
在捕获之后/之后没有返回声明。
试试这个:
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;
}
}
答案 4 :(得分:1)
更具体一点。如果方法不是void,则代码中的每个fork必须返回适当的值或throw。在您的情况下,catch fork不执行上述任何操作,并且您的代码无法编译。
答案 5 :(得分:0)
你必须总是返回一个布尔值试试这个:
public bool CloseCOMPort()
{
bool isClosed = false;
try
{
if (oSerialPortMisc != null && oSerialPortMisc.IsOpen)
{
oSerialPortMisc.Close();
isClosed=true;
}
}
catch (Exception exp)
{
}
return isClosed;
}
答案 6 :(得分:0)
如果遇到预期,您可能会进入try
/ catch
区块。
这意味着yoru函数永远不会返回值。 C#编译器非常聪明,可以发现它。
答案 7 :(得分:0)
您在try块内返回isClosed
并且未在catch块中返回任何内容。因此,如果引发任何异常,您的函数将不会返回任何内容。
建议:您可以在catch块上返回false
。