我想要一个具有如下属性的vb类:
Public Class aClass
Private dict As Dictionary(Of String, Integer)
Public Sub New()
dict = New Dictionary(Of String, Integer)
dict.Add("something", 2)
dict.Add("something other", 4)
End Sub
Public ReadOnly Property Prop As List(Of String)
Get
Dim newList As New List(Of String)
For Each d As String In dict.Keys
newList.Add(d)
Next
Return newList
End Get
End Property
属性方法将遍历所有字典条目并将密钥添加到列表中。
如何在表单中调用此属性方法并在列表框中显示列表?
Public Class Form1
Dim f As aClass = New aClass
Public Sub New()
' This call is required by the designer.
InitializeComponent()
upDateView()
' Add any initialization after the InitializeComponent() call.
End Sub
Public Sub upDateView()
ListBox1.Items.Clear()
ListBox1.Items.Add(f.Prop)'This is where I get really stuck??
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
f.addToDict(TextBox1.Text)'This method has been created
upDateView()
End Sub
End Class
我已经搜索了谷歌超过一天半,但最后我已经承认要求一些帮助,我是新手所以请耐心等待这对你们来说很容易。
由于
凯文
答案 0 :(得分:2)
你可以这样做:
ListBox.Items.AddRange(dicvtionary.Keys.ToArray())
希望这会有所帮助..
答案 1 :(得分:1)
我建议不要将列表作为属性公开,因为调用者可以更改列表。在您的示例中,这些更改不会反映在数据中,因此该功能对于调用者来说是无用的。如果呼叫者想要一个列表,他或她可以创建一个列表。如果您只想发布密钥的枚举,最安全的方法是创建类型为IReadOnlyCollection(Of T)
的属性:
Public Class aClass
Private dict As Dictionary(Of String, Integer)
Public Sub New()
dict = New Dictionary(Of String, Integer)
dict.Add("something", 2)
dict.Add("something other", 4)
End Sub
Public ReadOnly Property Prop As IReadOnlyCollection(Of String)
Get
Return dict.Keys.ToList().AsReadOnly()
End Get
End Property
End Class
这样,调用者就无法篡改列表项(在您的情况下,调用者在创建单独的列表时无法更改字典键的基础集合)。为了基于Keys创建列表,上面的示例使用ToList()扩展方法。然后,AsReadOnly()方法返回一个无法更改的只读列表。
要将项添加到ListBox,请使用以下代码:
ListBox1.Items.AddRange(cls.Prop.ToArray())
请注意,该代码涉及很多集合的转换(键 - > ToList - > AsReadOnly - > ToArray)。在这种情况下,它也可以替代将属性的类型更改为字符串数组(String()
),并使用Keys.ToArray()作为唯一必要的转换。如果类的调用者在同一个程序集中,这是简化事情的好方法。