Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 并非所有代码路径都返回c中的值_C#_C# 4.0 - Fatal编程技术网

C# 并非所有代码路径都返回c中的值

C# 并非所有代码路径都返回c中的值,c#,c#-4.0,C#,C# 4.0,我得到的错误不是所有的代码路径在方法中都返回一个值。此方法返回我定义的int值。但是我不知道为什么即使我返回了一个int值也会发生这个错误。有人能帮我吗?你没有别的案子,所以你没有涵盖所有的案子。您可能在逻辑上涵盖了所有情况,但在语法上没有。因此,您可能需要返回第一个服务器id,然后添加 public int Queue() { using (Entities server = new Entities()) { var Serve

我得到的错误不是所有的代码路径在方法中都返回一个值。此方法返回我定义的int值。但是我不知道为什么即使我返回了一个int值也会发生这个错误。有人能帮我吗?

你没有别的案子,所以你没有涵盖所有的案子。您可能在逻辑上涵盖了所有情况,但在语法上没有。因此,您可能需要返回第一个服务器id,然后添加

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();