0
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;
            }
        }
    }

メソッドでエラーが発生します(すべてのコードパスが値を返すわけではありません)。このメソッドは、私が定義したint値を返します。しかし、int値を返したとしても、なぜこのエラーが発生するのかわかりません。誰か助けてもらえますか?

4

6 に答える 6

5

ifとたくさんのステートメントがありますelse ifが、ステートメントはありませんelse。コンパイラに関する限り、どのif条件も満たされないことは完全に考えられます。その場合、メソッドには戻り値がありません。

elseステートメント内、またはif一般的な構成の後に値を返すことができます。または、コードが実際に条件を満たさずにステートメントを終了してはならない場合は、メソッドの最後に例外をスローして、エラーが発生したことを示すことができます。if例外は、メソッドの許容可能な出口戦略です。

于 2012-09-19T18:27:28.887 に答える
3

ここには、特定のエラーメッセージに対処している他の多くの回答がありますが、見落とされているメソッドの根本的な問題があります。最小の3つの整数を返すためだけに、非常に長く複雑な一連のif /elseifステートメントがあります。それを行うにはもっと簡単な方法があります。リファクタリングが最も少ない方法は、クエリの直後に次を追加することです。

return new[] { ServerId1, ServerId2, ServerId3  }.Min();

ただし、クエリ自体をリファクタリングして、3つではなく1つのクエリのみを実行し、3つの異なるサーバーIDをハードコーディングしないようにすることもできます。これにより、内のすべてを次のように置き換えることができますusing

return (from serverID in server.AppPM_Patches
where serverID.PatchStatus == "NotStarted"
group serverID  by serverID.ServerId into servers
select servers.Count())
.Min();
于 2012-09-19T18:57:30.547 に答える
1

あなたはelseケースを持っていないので、すべてのケースをカバーしていません。論理的にはすべてのケースをカバーしたかもしれませんが、構文的にはカバーしませんでした。したがって、最初のサーバーIDを返し、追加するだけでよい場合があります。

else
{
    return ServerId1;
}
于 2012-09-19T18:26:49.813 に答える
1
    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;
                }
        }
于 2012-09-19T18:41:38.467 に答える
0

の少なくとも1つが満たされていない場合、else ifまたはif満たされている場合、「デフォルト」の戻り値はありません。

最後にを追加するreturnか、最後else ifを単にに変更しelseます。

于 2012-09-19T18:26:55.670 に答える
0

関数の最後に到達した場合、まだ何も返されていません。

于 2012-09-19T18:27:16.347 に答える