2017-12-11 12 views
0

大学の割り当てに単純なIDジェネレータを実行しようとしています。しかし今、私はこの問題に直面しています。「関数はすべてのパスで値を返さない」ということを示しています。私が得た結果は、常に "F"のパスです。私は何をすべきか?この問題を解決するにはどうすればよいですか?関数はすべてのコードパスで値を返しません。

Private Function GenerateID(ByVal gender As String) As String 

    Dim yearJoin As Int32 = Now.Year.ToString().Substring(2, 2) 

    If String.Compare(gender, "Male") Then 
     Return (yearJoin & "M" & (maxRows + 1).ToString("D3")) 
    ElseIf String.Compare(gender, "Female") Then 
     Return (yearJoin & "F" & (maxRows + 1).ToString("D3")) 
    End If 

End Function 
+0

最後にelse caseがありません。または関数の終了前に値を返すだけです –

+1

男性と女性以外の性別はありますか?もしそうでなければ、ElseIfをしないでください。しかし、別の性別がある場合は、そのような場合に何をすべきか考える必要があります。 – Ronald

答えて

0

はただの条件が一致した場合にはnullのようないくつかのデフォルト値を返します。

Private Function GenerateID(ByVal gender As String) As String 

    Dim yearJoin As Int32 = Now.Year.ToString().Substring(2, 2) 

    If String.Compare(gender, "Male") Then 
     Return (yearJoin & "M" & (maxRows + 1).ToString("D3")) 
    ElseIf String.Compare(gender, "Female") Then 
     Return (yearJoin & "F" & (maxRows + 1).ToString("D3")) 
    End If 
    Return Nothing 
End Function 
0

方法はどのような場合には値を返す必要があります。したがって... ElseIf..ElseIf...に追加するか、末尾にReturn something(代替値として)を追加するか、またはgenderMaleでもFemaleでもない場合は例外をスローします。

(それは他に何ができるため?)、私は後者を好む:あなたはまた、Option Strict Onを使用する必要があります

Private Function GenerateID(ByVal gender As String) As String 
    Dim yearJoin As String = Date.Today.Year.ToString().Substring(2, 2) 
    Dim isMale As Boolean = String.Equals(gender, "Male", StringComparison.InvariantCultureIgnoreCase) 
    Dim isFemale As Boolean = String.Equals(gender, "Female", StringComparison.InvariantCultureIgnoreCase) 

    If Not isMale AndAlso Not isFemale Then 
     Throw New ArgumentException($"{NameOf(gender)} must either be Male or Female", NameOf(gender)) 
    End If 

    Dim maleFemaleLetter = If(isMale, "M", "F") 
    maxRows += 1 
    Dim id As String = $"{yearJoin}{maleFemaleLetter}{(maxRows).ToString("D3")}" 
    Return id 
End Function 

String.Compare整数を返します。 Option Strict Offはこれをサイレントに変換してBooleanになります。代わりにString.Equalsを使用してください。 と同じで、StringIntegerではありません。厄介なバグを防ぐために型安全なコードを書く。

関連する問題