2013-02-12 20 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。

希望有所帮助。