在公共方法中检测到不可达代码
本文关键字:代码 检测 方法 | 更新日期: 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。编译器已经正确地推断出,在任何情况下都不会执行第四个返回语句,因此它是"不可访问的"。不可访问的代码浪费空间(如果它在编译过程中发出——它可以被优化掉),并且通常表明程序员有错误。
如果您有if
和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");
所以编译器想要帮助修复这个错误。删除冗余代码或更改逻辑