这个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 ... :)

+2

你会得到什么错误信息?你想做什么? – TJHeuvel 2011-06-14 11:58:28

+3

也许你可以评估你想在其中找到什么错误的部分? – ub1k 2011-06-14 11:58:48

+2

您收到哪些错误?是否有任何异常被抛出?有没有不是你所期望的行为?你是否试图同时使用这段代码?在我怀疑的这种情况下,一些更多的信息将有助于提供更明确的答案。 – 2011-06-14 11:59:32

更具体。如果该方法不是void,则代码中的每个叉必须返回适当的值或抛出。在你的情况下,catch fork没有执行上述任何操作,并且你的代码不能编译。

该方法并不总是返回一个值。 你的编译器应该告诉你同样的事情。

值(isClosed)仅在try { .. }块中返回。现在,想象一下,如果在返回语句之前失败(抛出异常),代码将继续在catch { .. }中返回任何内容,这就是为什么代码无法编译的原因。

您应该在方法的底部放置一个return声明。

定义isClosed位于方法的顶部,并将其返回到底部,无论如何。

public bool CloseCOMPort() 
{ 
    bool isClosed = false; 

    try { .. } 
    catch { .. } 

    return isClosed; 
} 
+0

为了澄清,如果代码进入catch块,它不会返回任何东西。 – TJHeuvel 2011-06-14 11:59:35

+0

@TJHeuvel:我已经更新了我的答案。 – Kevin 2011-06-14 12:00:07

+0

@himanshu:它没有早点说:)。无论如何,我解释了如果你的代码进入'catch'块会发生什么。 – Kevin 2011-06-14 12:03:38

在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; 
     } 
    } 
+0

谢谢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; 
} 
+0

不一定。他可以抛弃这个漏洞,代码仍然很好。检查我的答案。 – 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块可确保即使您决定重新抛出您陷入的任何异常或决定不捕获异常,也能执行该代码。

+0

+1:在所有答案中,这是唯一一个以某种方式实际处理捕获到的异常的人。 (即使这只是一条建议OP处理它的评论,我在问题中注意到的第一件事情不是'catch'中没有返回,而是'catch'中缺少_anything_。 – David 2011-06-14 12:16:01

您在try块内返回isClosed,并且不在catch块中返回任何内容。所以,如果发生任何异常,你的函数将不会返回任何东西。

建议:您可以在catch块上返回false