0

クラスを継承するために Web フォームの基本クラスを使用していた古いシステムから、コードを VB から C# に変換中です。古いシステムのように機能する新しいエクストラネット用の新しいログインを構築したいと考えています。

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 に答える