我正在将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
答案 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)替换定义中的第二个字符串