我怎样才能创建一个" enum"动态输入属性值

时间:2012-11-16 18:28:36

标签: vb.net list properties dictionary enums

我需要在一个类中创建一个属性,该属性将为程序员提供一个可供选择的值列表。我过去使用枚举类型做过这个。

Public Enum FileType
    Sales
    SalesOldType
End Enum

Public Property ServiceID() As enFileType
    Get
        Return m_enFileType
    End Get
    Set(ByVal value As enenFileType)
        m_enFileType = value
    End Set
End Property

问题是我想根据SQL表值填充类的init上的值列表。根据我的阅读,不可能动态创建枚举,因为它们基本上是常量。

有没有办法可以使用列表或字典类型来实现我的目标? 或任何其他可行的方法。

2 个答案:

答案 0 :(得分:1)

我不知道这是否会回答你的问题,但这只是我对此事的看法。我喜欢enums,主要是因为它们对我很方便,程序员。这只是因为当我编写代码时,使用和枚举常量值不仅使我不仅在键入时自动完成,而且还使编译时错误检查确保我只能给出有效的枚举值。但是,枚举只是不适用于运行时定义的值,因为,就像你说的那样,有编译时定义的常量。

通常,当我使用从示例中加载SQL表的灵活值时,我只会使用字符串值。因此,我只需将SalesSalesOldType存储在表格中,并将其用作FileType的值。我通常使用字符串而不是整数,因为如果我在调试时查看数据表,字符串是人类可读的。

现在,您可以执行一些混合操作,允许存储值并来自表,但是将常用值定义为代码中的常量,如下所示:

 Public Class FileTypeConstants
       public const Sales = "Sales"
       public const SalesOldType = "SalesOldType"
 End Class

通过这种方式,您可以确保在使用常见值进行编码时,一个字母中的小字符串错误不会导致程序中出现错误。

另外,作为附注,我编写代码和应用程​​序,通过一次性部署部署内部部署到我们公司,因此对于很少添加的值,我仍然会使用枚举,因为它非常容易添加值和推出更新。因此,使用和枚举与数据库值的问题可能是获取用户更新的难易程度之一。如果你很少更新,数据库值可能是最好的,如果你经常更新并且用户没有完成更新,那么枚举仍然可以正常工作。

希望其中一些可以帮到你!

答案 1 :(得分:-1)

如果在编译代码后值不会改变,那么听起来最好的选择就是自动生成代码。例如,您可以编写一个类似这样的简单应用程序:

Public Shared Sub Main()
    Dim builder As New StringBuilder()
    builder.AppendLine("' Auto-generated code.  Don't touch!!  Any changes will be automatically overwritten.")
    builder.AppendLine("Public Enum FileType")
    For Each pair As KeyValuePair(Of String, Integer) In GetFileTypesFromDb()
        builder.AppendLine(String.Format("    {0} = {1}", pair.Key, pair.Value))
    End For
    builder.AppendLine("End Enum")
    File.WriteAllText("FileTypes.vb", builder.ToString())
End Sub

Public Function GetFileTypesFromDb() As Dictionary(Of String, Integer)
    '...
End Function

然后,您可以将该应用程序添加为项目中的预构建步骤,以便每次编译主应用程序时它都会自动运行。