在公共方法中检测到不可达代码

本文关键字:代码 检测 方法 | 更新日期: 2023-09-27 18:17:35

我收到一个"检测到不可达的代码"的警告方法:

return RedirectToAction("WorkspaceHome", "Workspace");

我该如何解决这个问题?谢谢!

public ActionResult Delete_Task_Project(int id)
{
    using (ctx_TaskCollab.TaskCollab tkContext = new ctx_TaskCollab.TaskCollab())
    {
      //get the task 
      ctx_TaskCollab.Task taskToBeDeleted = tkContext.Tasks.Where(x=>x.Task_PK == id).Single();
      //check if the task is being deleted by the owner 
      if (taskToBeDeleted.CreatedBy == User.Identity.Name.ToLower())
      {
          //if the task is a project then delete the subtasks and the project.
          if (taskToBeDeleted.TaskParent_FK == null)
          {
              //get all the subtasks 
              List<ctx_TaskCollab.Task> tasksToBeDeleted = tkContext.Tasks.Where(x=>x.TaskParent_FK == id).ToList();
              foreach (var item in tasksToBeDeleted)
              {
                  item.IsDeleted = true;
              }
              taskToBeDeleted.IsDeleted = true;
              tkContext.SaveChanges();
              return RedirectToAction("WorkspaceHome", "Workspace", new { view="Projects"});
          }
          else { //delete the task
              taskToBeDeleted.IsDeleted = true;
              tkContext.SaveChanges();
              return RedirectToAction("WorkspaceHome", "Workspace", new { view="Tasks"});
          }
          //If the id is a project, delete the project and the tasks.
      }
      else 
          return RedirectToAction("NotAuthorized","Errors");
    }                
    return RedirectToAction("WorkspaceHome", "Workspace");
}

在公共方法中检测到不可达代码

最后的返回语句:

return RedirectToAction("WorkspaceHome", "Workspace");

将永远不会执行,因为在它之前没有不首先返回其他内容的代码路径。删除此语句以使警告静音。

为了详细说明,下面是你的方法的简化结构:

using {
    if {
        if {
            return; // 1
        } else {
            return; // 2
        }
    } else {
        return; // 3
    }
}
return; // 4

如果不先传递其他三个语句中的一个,就不能返回语句4。编译器已经正确地推断出,在任何情况下都不会执行第四个返回语句,因此它是"不可访问的"。不可访问的代码浪费空间(如果它在编译过程中发出——它可以被优化掉),并且通常表明程序员有错误。

如果您有ifelse,则没有第三种方法,这就是为什么using之后的代码永远不会执行的原因。你可以这样简化它来理解我的意思:

using (var foo = SomeDisposable)
{
    if (SomCondition)
    {
        if (SomeOtherCodition)
        {
            return SomeThing;
        }
        else
        { 
            return SomethingElse;
        }
    }
    else
        return HereAllCasesAreHandled;
}
// following code is in the void because it can never be executed:
return RedirectToAction("WorkspaceHome", "Workspace");

所以编译器想要帮助修复这个错误。删除冗余代码或更改逻辑