列舉型別字串處理的注意事項
不知道大家是否有發現,列舉型別在做字串處理時,會因寫法不同而有所差異。
舉個例子來看,假設我們寫了一個SexType的列舉
Enum SexType As Integer
Boy
Girl
End Enum
並做了如下的字串處理:
Dim sex As SexType = SexType.Boy
Console.WriteLine("Sex: " & sex.ToString & " (" & sex & ")")
後面未加ToString()的在編譯後會先被轉型成Int後才轉型為String。
若換個寫法
Dim sex As SexType = SexType.Boy
Console.WriteLine(String.Format("Sex: {0} ({1})", sex, CInt(sex)))
運行後結果跟上面的一樣,因此我們可發現透過String.Format來處理,列舉型別就不會先轉為int再轉為String。
再做個實驗看看,當我們把列舉值直接秀出
Dim sex As SexType = SexType.Boy
Console.WriteLine(sex)
若是先把列舉值塞到Object型別再顯示
Dim sex As SexType = SexType.Boy
Dim sexObj As Object = sex
Console.WriteLine(sexObj)
由以上實驗可以看出,當把列舉值直接當字串顯示時,會先轉成Int後再顯示。但當把列舉值塞到Object顯示,則會直接顯示而不會先轉成Int。
完整範例
Module Module1
Enum SexType As Integer
Boy
Girl
End Enum
Sub Main()
Dim msg As String
Dim sex As SexType = SexType.Boy
msg = "Sex: " & sex.ToString & " (" & sex & ")"
Console.WriteLine(msg)
msg = String.Format("Sex: {0} ({1})", sex, CInt(sex))
Console.WriteLine(msg)
End Sub
End Module