这个c#代码出了什么问题?

时间:2011-06-14 11:57:27

标签: 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)
        {

        }
    }

当我编译这段代码时,它会给出错误..“并非所有代码路径都返回一个值”。 我不知道这里的错误。请帮忙.. Thanxxx ...:)

8 个答案:

答案 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