как использовать новую коллекцию vb6 в vb.net - PullRequest
0 голосов
/ 12 февраля 2019

Я конвертирую проект 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 голосов
/ 12 февраля 2019

Код 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-словаря).

0 голосов
/ 12 февраля 2019

вы пробовали гуглить свой вопрос первым?Я думаю, что вы не сделали.Но в любом случае, вот подсказка:

' 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)

...