如何在vb.net中使用vb6的新集合

时间:2019-02-12 11:31:17

标签: vb.net vb6 vb6-migration

我正在将vb6项目转换为vb.net,但是卡在了这些

Private mCol As Collection

Public Property Get NewEnum() As IUnknown
    'this property allows you to enumerate
    'this collection with the For...Each syntax
    Set NewEnum = mCol.[_NewEnum]
End Property

Private Sub Class_Initialize()
    'creates the collection when this class is created
    Set mCol = New Collection
End Sub

我是vb.net的新手,所以我对使用这些代码一无所知。有人可以向我解释其工作方式以及如何在vb.net中对其进行编码

这是vb6的收集功能

Public Function Add(Key As String, Optional sKey As String) As clsUser_Rights
    'create a new object
    Dim objNewMember As clsUser_Rights
    Set objNewMember = New clsUser_Rights

    'set the properties passed into the method
    objNewMember.Key = Key
    If Len(sKey) = 0 Then
        mCol.Add objNewMember
    Else
        mCol.Add objNewMember, sKey
    End If

    'return the object created
    Set Add = objNewMember
    Set objNewMember = Nothing
End Function

这就是我尝试过的

Private mCol As New Dictionary(Of string,string)

Public Function Add(Key As String, Optional sKey As String = "") As clsMsmt
    'create a new object
    Dim objNewMember As clsMsmt
    objNewMember = New clsMsmt

    'set the properties passed into the method
    objNewMember.Key = Key
    If sKey.Length = 0 Then
        mCol.Add(objNewMember)
    Else
        mCol.Add(objNewMember, sKey)
    End If

    'return the object created
    Add = objNewMember
    objNewMember = Nothing
End Function

2 个答案:

答案 0 :(得分:1)

您突出显示的VB6代码看起来像是内置Collection类型的自定义包装类。枚举器部分是允许自定义集合上的For Each ... Next

根据集合类的用途,在.NET中可能不需要它。之所以在VB6中创建自定义收集类的原因之一是为了提供类型安全性,因为Collection仅提供Object。为此,您可以使用List (Of T)Dictionary (Of TKey, TValue),具体取决于集合的使用方式。

如果集合中包含其他逻辑,则您可能仍会坚持使用框架类,并添加一个或多个扩展方法来处理其他逻辑,或者可能继承自Collection (Of T)KeyedCollection (Of TKey, TItem)。基类将提供集合样板逻辑,您可以集中精力在继承的类中提供其他逻辑。

如果使用VB6集合的代码同时由字符串和整数索引,则您可能需要做更多的工作才能获得等效的.NET,但我不会期望这样做(即使完成后,最有可能的用例可能是删除项目,您可以重写它以使其与带有字符串索引的.NET词典一起正常工作。)

答案 1 :(得分:0)

您先尝试使用Google搜索您的问题吗?我想你没有。但是无论如何,这是一个提示:

' wrong: Dim mCcol As New Microsoft.VisualBasic.Collection()  

' correct: 
Dim mCcol As New Collection()  

对不起,首先在C#中进行了尝试,并且在VB.NET中默认引用了该程序集。

添加了新示例(在空WinForm中:)

    Dim dict As New Dictionary(Of String, String)
    dict.Add("KEY1", "dict: Some kind of stringdata")
    dict.Add("KEY2", "dict: other string data")
    dict.Add("KEY3", "dict: and finally: a string")

    For Each s As KeyValuePair(Of String, String) In dict
        MessageBox.Show(s.Value)
    Next

用类型(clsMsmt)替换定义中的第二个字符串