我在接下来的结尾附近收到“无法检测到的代码”警告 方法:
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");
}
答案 0 :(得分:2)
您的最终回复声明:
return RedirectToAction("WorkspaceHome", "Workspace");
永远不会执行,因为它之前没有代码路径,不会先返回其他内容。删除此语句以使警告静音。
详细说明,这是方法的简化结构:
using {
if {
if {
return; // 1
} else {
return; // 2
}
} else {
return; // 3
}
}
return; // 4
如果没有先通过其他三个中的一个,您将无法返回第4号声明。编译器已经正确地推断出没有第四个返回语句将执行的情况,因此它是“无法访问的”。无法访问的代码会浪费空间(如果它甚至在编译期间被释放 - 它可以被优化掉)并且通常表示程序员的错误。
答案 1 :(得分:1)
如果if
的{{1}}没有else
,则没有第三种方式,这就是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");
因此编译器希望帮助修复此错误。删除冗余代码或更改逻辑。