【问题标题】:not all code path returns a value on Active Directory check并非所有代码路径都在 Active Directory 检查中返回值
【发布时间】:2013-10-01 00:50:25
【问题描述】:

我正在将旧系统的代码从 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;
            }
        }
    }

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

【问题讨论】:

  • 在你的catch中,你需要一个ifs之外的return,或者你需要一个带return的else。或者你可以在捕获之外和之后放置一个返回。你的方法必须返回一些东西,因为它不是 void,如果所有代码路径都没有以 return 结尾,Visual Studio 不会让它编译。
  • 如果fncADStatus != fncSuccess 怎么办?如果 try 中的 if 块的计算结果为 false,则该方法不会返回任何内容。

标签: c# asp.net active-directory session-variables session-cookies


【解决方案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;
        }
    }

【讨论】:

    【解决方案2】:

    并非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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2013-10-06
      • 2016-02-14
      • 2014-04-02
      相关资源
      最近更新 更多