我最近遇到的问题是字典只允许每个键1个值。阅读我已经看到多个答案建议通过类创建一个类型。现在授予我对类不太了解,我总是认为类只是函数和子函数的集合。为什么他们可以创建数据类型,你如何使用它们呢?
答案 0 :(得分:5)
Dictionary
的基本定义由Dictionary(Of type1, type2)
给出,其中类型可以是任何类型,即基本类型(String
,Double
等)或您创建的(例如,通过Class
)。您也可以将其视为“个别变量”或内部集合(Lists
,Arrays
等)。一些例子:
Dim dict = New Dictionary(Of String, List(Of String))
Dim tempList = New List(Of String)
tempList.Add("val11")
tempList.Add("val12")
tempList.Add("val13")
dict.Add("1", tempList)
Dim dict2 = New Dictionary(Of String, type2)
Dim tempProp = New type2
With tempProp
.prop1 = "11"
.prop2 = "12"
.prop2 = "13"
End With
dict2.Add("1", tempProp)
Dim dict3 = New Dictionary(Of String, List(Of type2))
Dim tempPropList = New List(Of type2)
Dim tempProp2 = New type2
With tempProp2
.prop1 = "11"
.prop2 = "12"
.prop2 = "13"
End With
tempPropList.Add(tempProp2)
dict3.Add("1", tempPropList)
type2
由以下类定义:
Public Class type2
Public prop1 As String
Public prop2 As String
Public prop3 As String
End Class
注意:您可以根据需要更改上述示例中的类型;同时在Values
和Keys
中添加任何内容(列表,自定义类型等)。
注意2:VB.NET中的原始类型(例如:Double
)基本上是一堆变量(在给定框架内全局声明)和函数:Double.IsInfinity
(函数),{{ 1}}(变量)等;因此,类型可以理解为内置类,即一组函数和变量的通用名称,可用于在另一个类中定义另一个变量。我认为提出的例子非常具有描述性。
答案 1 :(得分:1)
类不只是关于函数和子函数,它们还包含变量和属性。这可用于存储一堆值。
假设您希望按人员编号在词典中存储某人的名字和姓氏。
Public Class Person
Public Property Number As String
Public Property FirstName As String
Public Property LastName As String
End Class
Dim dict = New Dictionary(Of String, Person)
Dim p = New Person
p.Number = "A123"
p.FirstName = "John"
p.LastName = "Doe"
dict.Add(p.Number, p)
然后取回那个人
p = dict("A123")
Console.WriteLine(p.FirstName)
Console.WriteLine(p.LastName)
答案 2 :(得分:0)
在结合这个和其他来源的知识后,这是我的最终解决方案:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dictionary = New Dictionary(Of String, Pair)
Dim p As New Pair("A", "B")
MsgBox(p.First)
MsgBox(p.Second)
End Sub
End Class
Public Class Pair
Private ReadOnly value1 As String
Private ReadOnly value2 As String
Sub New(first As String, second As String)
value1 = first
value2 = second
End Sub
Public ReadOnly Property First() As String
Get
Return value1
End Get
End Property
Public ReadOnly Property Second() As String
Get
Return value2
End Get
End Property
End Class