为什么第二个IF语句是检测到的Unrachable代码?

时间:2015-09-04 12:48:46

标签: c# .net winforms

TaskCompletionSource<bool> sy;
        public string SendResponse(HttpListenerRequest request)
        {
            string result = "";
            string key = request.QueryString.GetKey(0);
            if (key == "cmd")
            {
                if (request.QueryString[0] == "upload status")
                {
                    if (Youtube_Uploader.fileuploadstatus == "uploading file")
                    {
                        Youtube_Uploader.fileuploadstatus = "";
                        return "uploading";
                    }
                    else
                    {
                        return "upload unknown state";
                    }

                    if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully")
                    {
                        Youtube_Uploader.fileuploadstatus = "";
                        return "upload completed";
                    }
                    else
                    {
                        return "upload unknown state";
                    }
                }
                if (request.QueryString[0] == "nothing")
                {
                    return "Connection Success";
                }
                if (request.QueryString[0] == "start")
                {
                    StartRecrod();
                    result = "Recording started";
                }

                if (request.QueryString[0] == "stop")
                {
                    dirchanged = false;
                    StartRecrod();
                    result = "Recording stopped and preparing the file to be shared on youtube";
                    sy = new TaskCompletionSource<bool>();
                    WatchDirectory();
                    sy.Task.Wait();
                    Youtube_Uploader youtubeupload = new Youtube_Uploader(fileforupload);

                }
            }
            else
            {
                result = "Nothing have been done";
            }

            return result;

        }

这一行:

if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully")

&#39; if&#39;是绿色下划线并说检测到无法访问的代码。 我该如何修复它以及它为何无法访问代码?

也许我需要使用result =而不是返回?但这似乎不是问题所在。

3 个答案:

答案 0 :(得分:10)

因为在上面,你有:

if (...)
{
    return "uploading";
}
else
{
    return "upload unknown state";
}

ifelse都是真的,所以无论如何代码都将从该块返回,并且下面的代码不会被执行。

您有三个选项,因此您似乎正在寻找在这种情况下最具可读性的switch

switch (Youtube_Uploader.fileuploadstatus)
{   
    case "uploading file":
        Youtube_Uploader.fileuploadstatus = "";
        return "uploading";

    case "file uploaded successfully":
        Youtube_Uploader.fileuploadstatus = "";
        return "upload completed";

    default:
        return "upload unknown state";
}

或使用词典将服务状态转换为您的应用状态,或按照@Thiago的建议使用if () else if () else

答案 1 :(得分:5)

因为你的退货声明。它会阻止if / else通量。也许你正在寻找这个:

if (Youtube_Uploader.fileuploadstatus == "uploading file")
                    {
                        Youtube_Uploader.fileuploadstatus = "";
                        return "uploading";
                    }
                    else if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully")
                    {
                        Youtube_Uploader.fileuploadstatus = "";
                        return "upload completed";
                    }                   
                    else
                    {
                        return "upload unknown state";
                    }

答案 2 :(得分:0)

if (Youtube_Uploader.fileuploadstatus == "uploading file")
                {
                    Youtube_Uploader.fileuploadstatus = "";
                    return "uploading";
                    //return may happen here case 1
                }
                else
                {
                    return "upload unknown state";
                    // or here case 2
                }

只有两种情况可能。

                if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully")

将您的代码转换为以下内容:

if (Youtube_Uploader.fileuploadstatus == "uploading file")
                {
                    Youtube_Uploader.fileuploadstatus = "";
                    return "uploading";
                    //return can happen here. Case 1
                }
                else if(some another condition) // case 2
                {
                    return "upload unknown state";
                    // or here case 2
                }
                //now this code is reachable 
                if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully")