0

我正在从一个旧系统将代码从 VB 转换为 C#,该系统使用 Web 表单的基类来继承类。我希望为我们的新外联网建立一个新的登录,它的功能类似于旧系统,我可能错过了一步,但这是我尝试转换的块。

public bool CheckAD()
    {
        string fncADStatus = "Failure";
        string fncSuccess = "Success";
        string fncFailure = "Failure";
        fncADStatus = Convert.ToString(Session["SessionADStatus"]);
        try
        {
            if (fncADStatus == fncSuccess)
            {
                return true;
            }
        }
        catch
        {
            if (fncADStatus == fncFailure)
            {
                return false;
            }
            if (Session["SessionADStatus"] == null)
            {
                return false;
            }
        }
    }

我收到以下错误“并非所有代码路径都返回值”,但我不太明白为什么。

4

2 回答 2

1

并非块中的所有代码路径都catch返回结果。通常,你会写这样的东西

public bool CheckAD()
{   
    try {...}
    catch
    {
        if (fncADStatus == fncFailure)
        {
            logger.Debug("One");
        }
        if (Session["SessionADStatus"] == null)
        {
            logger.Debug("Two");
        }

        return false; // <<<<< This bit is missing in your case
    }
}
于 2013-09-30T16:48:43.933 回答
1

它给你错误,因为你没有提到 else 语句;如果条件属于其他情况,则不会返回任何内容。执行以下操作不会给您错误。

public bool CheckAD()    { 
        string fncADStatus = "Failure";
        string fncSuccess = "Success";
        string fncFailure = "Failure";
        fncADStatus = Convert.ToString(Session["SessionADStatus"]);
        try
        {
            Boolean output = false;
            if (fncADStatus == fncSuccess)
            {
                output = true;
            }
            return output;
        }
        catch
        {
            Boolean output = true;
            if (fncADStatus == fncFailure)
            {
                output = false;
            }
            if (Session["SessionADStatus"] == null)
            {
                output = false;
            }
            return output;
        }
    }
于 2013-09-30T16:50:25.353 回答