Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在创建一个包含2700个常量及其说明的VB.NET类库。在使用什么样的数据结构方面需要帮助_Vb.net_Class_Dll_Data Structures_Constants - Fatal编程技术网

我正在创建一个包含2700个常量及其说明的VB.NET类库。在使用什么样的数据结构方面需要帮助

我正在创建一个包含2700个常量及其说明的VB.NET类库。在使用什么样的数据结构方面需要帮助,vb.net,class,dll,data-structures,constants,Vb.net,Class,Dll,Data Structures,Constants,它将包含处理非托管代码函数时使用的所有常量/错误结果。我手头已经有了所有的数据 问题在于我将如何组织它 我可以很容易地写下这样的话: ''' <summary> ''' The operation completed successfully. ''' </summary> Private Const ERROR_SUCCESS = &H0 {0, ERROR_SUCCESS, The operation completed successfully}, {1

它将包含处理非托管代码函数时使用的所有常量/错误结果。我手头已经有了所有的数据

问题在于我将如何组织它

我可以很容易地写下这样的话:

''' <summary>
''' The operation completed successfully.
''' </summary>
Private Const ERROR_SUCCESS = &H0
{0, ERROR_SUCCESS, The operation completed successfully},

{1, ERROR_INVALID_FUNCTION, Incorrect Function}
当然,这需要某种数据结构来保存沿着这些线的值数组:

''' <summary>
''' The operation completed successfully.
''' </summary>
Private Const ERROR_SUCCESS = &H0
{0, ERROR_SUCCESS, The operation completed successfully},

{1, ERROR_INVALID_FUNCTION, Incorrect Function}
你们都建议采用哪种结构?这是解决这个问题的更好方法。这将是一个类库,所以我不认为我可以使用一个单独的数据库。当有人使用我的类时,必须在运行时初始化此表

只是给你一些信息

Windows有2700个常量,每个常量都有自己的描述

我知道我也可以使用GetlastError,但这是一种绕过它的方法

例如:

假设有人正在使用此功能:

Imports MyClass 'which contains all error codes

Dim Error_Code as UInteger = MsiOpenProduct(ProdIndex, ProdCode)

If Error_Code = MyClass.ERROR_BAD_CONFIGURATION then
    msgbox("Error Occured")
    Exit Sub
End if
如果有人想要详细的错误信息

msgbox(Myclass.GetErrorDescription(Error_Code))
' Will return: The configuration information is corrupt.

这就是我想要实现的功能。我已经在数据库中有了所有的代码和描述。键入它很简单,因为我可以使用其中的数据轻松生成VB类文件。我只想知道如何有效地组织它

编写此类常量描述系列的一种方法是使用资源文件。根据您的描述,我了解到常数是一些错误代码,您对它们中的每一个都进行了描述。资源文件可以充当描述的字典,如果您需要该功能,还可以轻松支持多种语言

然后,您可以创建一个函数,该函数将接受一个常量并返回错误描述。该函数可以采用重载方法中的区域性来返回给定区域性的描述。

以下是一种方法:

NameSpace ProjectName

    Friend Enum WinResultCode            ' probably as Long
      <Description("Success")>Success = 0
      <Description("File Not Found")>FileNotFound = &Hxxxxx
      <Description("Invalid Function")>InValidFunction = 1
      ' etc
    End Enum

    Class ResultCode

        Friend Shared Function GetErrorDescription(nErr As ReturnCode) As String
          Return GetDescription(nErr)
        End Class

    End Class
End NameSpace
您可以将任何API结果声明为您的枚举类型(可能需要很长的长度),这样可以避免使用Ctype将结果转换为您的枚举。而且,由于主功能是共享的,因此不需要创建实例

GetDescription
函数是一个相当短的通用例程,它使用反射:

    Public Shared Function GetDescription(ByVal EnumConstant As [Enum]) As String
        Dim fi As FieldInfo = EnumConstant.GetType().GetField(EnumConstant.ToString())
        Dim attr() As DescriptionAttribute = _
            DirectCast( _
                fi.GetCustomAttributes(GetType(DescriptionAttribute), False), _
                DescriptionAttribute() )

        If attr.Length > 0 Then
            Return attr(0).Description
        Else
            Return EnumConstant.ToString()
        End If
    End Function

这只是一个粗略的想法,一些元素范围可能需要根据细节进行调整。但这将是一种将名称和描述保持在一起并允许轻松修改的方法。在某个时候,您可以将其放入DLL。

我不确定您的确切问题。如果你想减少常数的数量(2700听起来太多了),你应该提供更多关于这一切的信息。如果您想知道编写2700个变量的最佳方法,我想这取决于您:您可以设置一个易于访问的集合;一个班级;依赖外部资源(文件/DB/DLL等);。。。手动编写所有这些内容是一个很大的问题,但内存相关问题(计算机/VB.NET可以毫无问题地处理数百万件事情)是一个相当小的问题。刚刚澄清了这一点。您可以创建一个自定义类,该类将包含您想要的任意多个属性(例如:错误代码、错误描述、重要性等)并从文件、数据库和资源开始填充此类(它的集合)。。。甚至是硬编码。正如我所说的,有很多选择,我确实认为最好的学习方法实际上是犯错误:你应该尝试一些东西(不要过多地考虑客观的、最好的方法),仅仅根据我们给你的指示;记住,通常,客观上没有更好的选择。。。。或者您甚至可以创建一个函数,直接从外部文件读取数据(而不在内存中存储任何内容)。只要尝试一下,看看每种选择在特定条件下的优缺点,在真正面对真正的问题之前,不要浪费太多的时间去想所有的事情。PS:我理解Szymon的意思是使用你可以在项目中制作的硬编码(你的项目属性中有一个Resources选项卡),你可以在运行时访问它:大量的选项:只需尝试一下。我不认为这可以作为编码时的可继承类工作。还是我错了?我不确定在这种情况下,您想要继承类做什么。你能解释一下吗?对不起。不可继承。这意味着您导入了那个类,并且您可以处理所有的错误代码。包括我想要的描述功能。资源被嵌入到编译器创建的dll中,所以当你使用dll时,所有的资源都是可用的。我从没想过这样的事情是可能的。这对我来说是新的。我一定会试试这个。顺便说一句,谢谢。哦,写作不是乏味的部分。这将在一瞬间完成。一旦你把一些东西制成表格,你所需要的就是一个公式。