2016-11-16 46 views
0

土耳其區域設置,下面似乎是一個問題:在土耳其語區域[Enum] .GetName不返回正確的名稱。爲什麼?

Public Enum enFonts 
    TOKEN_Line_Number = 2 
    End Enum 

    Dim StyleName As String = [Enum].GetName(GetType(enFontsUpper), fnt).ToUpper 

StyleName和被設置爲「TOKEN_LxNE_NUMBER」,其中x設定點爲大寫我在上面。爲什麼?

下面是測試代碼,演示了此行爲:

喬金德

Module Module1 
    Public Enum enFonts 
    TOKEN_Plain_Text = 1 
    TOKEN_Line_Number = 2 
    End Enum 

    Public Enum enFontsUpper 
    TOKEN_PlaIn_Text = 1 
    TOKEN_LIne_Number = 2 
    End Enum 

    Friend Styles As New Collection 

    Sub Main() 
    Dim STL As String = "TOKEN_LINE_NUMBER" 
    Dim fnt As enFonts = enFonts.TOKEN_Line_Number 

    'The following compare fails 
    Call Compare(STL, enFonts.TOKEN_Line_Number) 

    ' The following compare works because In changed i to uppercase I in LIne 
    Call Compare2(STL, enFontsUpper.TOKEN_LIne_Number) 

    End Sub 

    Private Sub Compare(STL As String, fnt As enFonts) 

    Dim StyleName As String = [Enum].GetName(GetType(enFonts), fnt).ToUpper 

    If StyleName.Equals(STL) Then 
     Call MsgBox(String.Format("'{0}' is equal to '{1}'", STL, StyleName)) 
    Else 
     Call MsgBox(String.Format("'{0}' is NOT equal to '{1}'", STL, StyleName)) 
    End If 

    End Sub 

    Private Sub Compare2(STL As String, fnt As enFontsUpper) 
    Dim StyleName As String = [Enum].GetName(GetType(enFontsUpper), fnt).ToUpper 

    If StyleName.Equals(STL) Then 
     Call MsgBox(String.Format("'{0}' is equal to '{1}'", STL, StyleName)) 
    Else 
     Call MsgBox(String.Format("'{0}' is NOT equal to '{1}'", STL, StyleName)) 
    End If 

    End Sub 

End Module 
+0

請使用編程語言標記。 – JJJ

+0

非常臭名昭着的谷歌「土耳其我的問題」基本命中。你必須決定用什麼語言來編寫你的枚舉變量。看起來大致像CultureInfo.InvariantCulture給我,絕對不是土耳其。所以告訴ToUpper()。 –

回答

0

現在我發現這個問題是在土耳其語言環境ToUpper"i".ToUpper返回資本I,頂部帶點。在Stackoverflow中似乎有很多解決方案可以解決這個問題。簡單的解決方案是使用ToLower而不是`ToUpper。