2013-02-12 19 views
0

我的項目經理指責我從我們的解決方案中刪除所有「Option Infer On」指令(爲了在他看來沒有未定義的類型)。VB.NET,INFER ON和Enum.GetValues

Dim enums = [Enum].GetValues(enumType) ' here I will use "As Array" 

For Each item In enums ' <================== WHAT TYPE TO USE HERE? 
    Dim ienum As [Enum] = CType(item, [Enum]) 

    Dim name As String 
    Dim caption As String 

    name = ienum.GetPropertyName 
    caption = ienum.GetStringValue 

    myDict.Add(caption, name) 
Next item 
+0

爲了記錄,當使用'Option Infer'時,類型不是未定義的。他們只是沒有明確寫在代碼中。編譯器仍將使用確切的類型。您可以將鼠標懸停在「Dim」關鍵字上,Visual Studio會告訴您它是什麼。 – DaveInCaz 2017-12-12 12:37:20

回答

1

根據MSDN這是一個常量數組,因此它將是一個可以轉換爲Integer的對象數組。

FWIW我有一些代碼做類似的工作,它拿起對每個枚舉值存儲的屬性。爲此,我使用GetNames,然後將其反射回Enum字段,我可以搜索存儲各種元數據元素(如「DisplayName」等)的Custom Attributes,然後Enum可以使用[Enum].Parse()重新構建。

希望有幫助!此外,我認爲必須更改所有代碼是一個愚蠢的想法,因爲您的經理不信任語言/開發人員!

+1

同意,關於經理... – serhio 2013-02-12 16:29:41

1

GetValues的返回類型是一個對象數組。因此For Each循環中的「item」變量的類型將是Object。

希望有所幫助。