[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