[VB.NET]列舉型別字串處理的注意事項

不知道大家是否有發現,列舉型別在做字串處理時,會因寫法不同而有所差異。

舉個例子來看,假設我們寫了一個SexType的列舉


Enum SexType As Integer
Boy
Girl
End Enum

並做了如下的字串處理:


Dim sex As SexType = SexType.Boy
Console.WriteLine(“Sex: “ & sex.ToString & “ (“ & sex & “)”)

後面未加ToString()的在編譯後會先被轉型成Int後才轉型為String。image

運行結果
image

若換個寫法


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)

編譯後程式還是會先被轉換成Int
image

運行結果
image

若是先把列舉值塞到Object型別再顯示


Dim sex As SexType = SexType.Boy
Dim sexObj As Object = sex
Console.WriteLine(sexObj)

運行結果
image

由以上實驗可以看出,當把列舉值直接當字串顯示時,會先轉成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

執行結果
image