C# 并非所有代码路径都返回c中的值
我得到的错误不是所有的代码路径在方法中都返回一个值。此方法返回我定义的int值。但是我不知道为什么即使我返回了一个int值也会发生这个错误。有人能帮我吗?你没有别的案子,所以你没有涵盖所有的案子。您可能在逻辑上涵盖了所有情况,但在语法上没有。因此,您可能需要返回第一个服务器id,然后添加C# 并非所有代码路径都返回c中的值,c#,c#-4.0,C#,C# 4.0,我得到的错误不是所有的代码路径在方法中都返回一个值。此方法返回我定义的int值。但是我不知道为什么即使我返回了一个int值也会发生这个错误。有人能帮我吗?你没有别的案子,所以你没有涵盖所有的案子。您可能在逻辑上涵盖了所有情况,但在语法上没有。因此,您可能需要返回第一个服务器id,然后添加 public int Queue() { using (Entities server = new Entities()) { var Serve
public int Queue()
{
using (Entities server = new Entities())
{
var ServerId1 = (from serverID in server.AppPM_Patches
where serverID.PatchStatus == "NotStarted" && serverID.ServerId == 1
select serverID.ServerId).Count();
var ServerId2 = (from serverID in server.AppPM_Patches
where serverID.PatchStatus == "NotStarted" && serverID.ServerId == 2
select serverID.ServerId).Count();
var ServerId3 = (from serverID in server.AppPM_Patches
where serverID.PatchStatus == "NotStarted" && serverID.ServerId == 3
select serverID.ServerId).Count();
if (ServerId1 == 0 && ServerId2 == 0 && ServerId3 == 0)
{
return ServerId1;//Convert.ToInt32(ServerId1);
}
else if (ServerId1 == 1 && ServerId2 == 0 && ServerId3 == 0)
{
return ServerId2;
}
else if (ServerId1 == 1 && ServerId2 == 1 && ServerId3 == 0)
{
return ServerId3;
}
else if (ServerId1 > ServerId2 && ServerId1 > ServerId3)
{
if (ServerId2 > ServerId3)
{
return ServerId3;
}
else
{
return ServerId2;
}
}
else if (ServerId2 > ServerId3 && ServerId2 > ServerId1)
{
if (ServerId1 > ServerId3)
{
return ServerId3;
}
else
{
return ServerId1;
}
}
else if (ServerId3 > ServerId1 && ServerId3 > ServerId2)
{
if (ServerId1 > ServerId2)
{
return ServerId2;
}
else
{
return ServerId1;
}
}
else if (ServerId1 == ServerId2 && ServerId2 == ServerId3 && ServerId1 == ServerId3)
{
return ServerId1;
}
else if (ServerId1 == ServerId2 && ServerId1 > ServerId3 && ServerId2 > ServerId3)
{
return ServerId3;
}
else if (ServerId2 == ServerId3 && ServerId2 > ServerId1 && ServerId3 > ServerId1)
{
return ServerId1;
}
else if (ServerId1 == ServerId3 && ServerId1 > ServerId2 && ServerId1 > ServerId3)
{
return ServerId1;
}
}
}
如果不满足至少一个else If或If,则不存在默认返回
在最末尾添加一个返回,或者将最后一个else if改为else。如果到达函数末尾,您还没有返回任何内容。您有一个if和一堆else if语句,但没有else语句。就编译器而言,完全可以想象没有一个if条件会得到满足。在这种情况下,该方法没有返回值
通常,可以在else语句中或在if构造之后返回值。或者,如果代码确实不应该在不满足任何条件的情况下退出if语句,那么您可以在方法的末尾抛出异常,以指示有错误。异常是一种可接受的方法退出策略。这里有许多其他答案可以解决您的特定错误消息,但您的方法还有更多被忽略的潜在问题。您有一个庞大的if/elseif语句系列,这些语句非常长,非常复杂,只返回最小的3个整数。有更简单的方法可以做到这一点。重构最少的方法是在查询之后立即添加以下内容:
else
{
return ServerId1;
}
public int Queue()
{
using (Entities server = new Entities())
{
int retVal=0;//initialize it your value
var ServerId1 = (from serverID in server.AppPM_Patches
where serverID.PatchStatus == "NotStarted" && serverID.ServerId == 1
select serverID.ServerId).Count();
var ServerId2 = (from serverID in server.AppPM_Patches
where serverID.PatchStatus == "NotStarted" && serverID.ServerId == 2
select serverID.ServerId).Count();
var ServerId3 = (from serverID in server.AppPM_Patches
where serverID.PatchStatus == "NotStarted" && serverID.ServerId == 3
select serverID.ServerId).Count();
if (ServerId1 == 0 && ServerId2 == 0 && ServerId3 == 0)
{
retVal=ServerId1;//Convert.ToInt32(ServerId1);
}
else if (ServerId1 == 1 && ServerId2 == 0 && ServerId3 == 0)
{
retVal=ServerId2;
}
else if (ServerId1 == 1 && ServerId2 == 1 && ServerId3 == 0)
{
retVal=ServerId3;
}
else if (ServerId1 > ServerId2 && ServerId1 > ServerId3)
{
if (ServerId2 > ServerId3)
{
retVal= ServerId3;
}
else
{
retVal=ServerId2;
}
}
else if (ServerId2 > ServerId3 && ServerId2 > ServerId1)
{
if (ServerId1 > ServerId3)
{
retVal=ServerId3;
}
else
{
retVal=ServerId1;
}
}
else if (ServerId3 > ServerId1 && ServerId3 > ServerId2)
{
if (ServerId1 > ServerId2)
{
retVal=ServerId2;
}
else
{
retVal=ServerId1;
}
}
else if (ServerId1 == ServerId2 && ServerId2 == ServerId3 && ServerId1 == ServerId3)
{
retVal=ServerId1;
}
else if (ServerId1 == ServerId2 && ServerId1 > ServerId3 && ServerId2 > ServerId3)
{
retVal=ServerId3;
}
else if (ServerId2 == ServerId3 && ServerId2 > ServerId1 && ServerId3 > ServerId1)
{
retVal=ServerId1;
}
else if (ServerId1 == ServerId3 && ServerId1 > ServerId2 && ServerId1 > ServerId3)
{
retVal=ServerId1;
}
return retVal;
}
}
但是,您可以重构查询本身,以便只执行一个查询,而不是三个查询,并且不必在三个不同的服务器ID中硬编码。这将允许您使用以下内容替换系统内部的所有内容:
我将尝试编写此SQL的等效代码:。。。按ServerID分组按COUNTx、ServerID排序并获取第一条记录,因为添加ServerID=4、5、。。。n、 +1反对投票。问一个真实的问题没什么错。你的问题更好。删除我的。
return new[] { ServerId1, ServerId2, ServerId3 }.Min();
return (from serverID in server.AppPM_Patches
where serverID.PatchStatus == "NotStarted"
group serverID by serverID.ServerId into servers
select servers.Count())
.Min();