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

Har*_*bdu 1 .net c# 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;

        }
Run Code Online (Sandbox Code Playgroud)

这一行:

if (Youtube_Uploader.fileuploadstatus == "file uploaded successfully")
Run Code Online (Sandbox Code Playgroud)

'if'带有绿色下划线,表示检测到无法访问的代码.我该如何解决它以及为什么它是无法访问的代码?

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

Cod*_*ter 10

因为在上面,你有:

if (...)
{
    return "uploading";
}
else
{
    return "upload unknown state";
}
Run Code Online (Sandbox Code Playgroud)

要么是if或者else为真,那么代码将从该块返回,并且它下面的代码将不会被执行.

您有三个选项,因此您似乎正在寻找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";
}
Run Code Online (Sandbox Code Playgroud)

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


Thi*_*dio 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";
                    }
Run Code Online (Sandbox Code Playgroud)