【发布时间】:2010-11-27 23:34:08
【问题描述】:
我正在尝试制作一个哈希表数组。我不知道这是否是最好的解决方案,在 PHP 中我只会做一个多维数组,但在 .NET 中并不那么容易。我是VB的新手,所以如果有更好的解决方案请解释一下。
我有 2 个联系人的电子邮件字段,一个联系人可以有很多。我只想加载编辑页面上的前两个进行编辑,无论它们是什么。
Private Sub loadPrimaryContactEmails(ByVal db As CRMDataDataContext, ByVal contactID As Guid)
Dim q = (From ce In db.ContactEmails Where ce.ContactID = contactID Select ce).Take(2)
Dim Emails As Array
Dim count = 0
For Each email In q
Emails(count) = New Hashtable
Emails(count).Add("email", email.Email)
Emails(count).Add("label", email.Label)
Emails(count).Add("id", email.ContactEmailID)
count = count + 1
Next
txtPCEmail1.Text = Emails(0).Item("email")
txtPCEmail1Label.Text = Emails(0).Item("label")
lblEmail1ID.Text = Emails(0).Item("id")
txtPCEmail2.Text = Emails(1).Item("email")
txtPCEmail2Label.Text = Emails(1).Item("label")
lblEmail2ID.Text = Emails(1).Item("id")
End Sub
我第一次尝试引用我的数组时遇到错误:
txtPCEmail1.Text = Emails(0).Item("email")
错误是:
Object variable or With block variable not set.
它会构建,所以我认为它可能会起作用。我不能只遍历我的数据源,因为我必须明确设置文本框字段。有没有更好的方法来做到这一点?或者有没有办法让哈希表数组起作用?
编辑 - 这是好的代码: 所以我去了 HybridDictionary...
Private Sub loadPrimaryContactEmails(ByVal db As CRMDataDataContext, ByVal contactID As Guid)
Dim q = (From ce In db.ContactEmails Where ce.ContactID = contactID Select ce).Take(2)
Dim Emails As New HybridDictionary()
Dim count = 1
For Each email In q
Emails.Add("email" + NCStr(count), email.Email)
Emails.Add("label" + NCStr(count), email.Label)
Emails.Add("id" + NCStr(count), email.ContactEmailID)
count = count + 1
Next
txtPCEmail1.Text = Emails("email1")
txtPCEmail1Label.Text = Emails("label1")
lblEmail1ID.Text = Emails("id1")
txtPCEmail2.Text = Emails("email2")
txtPCEmail2Label.Text = Emails("label2")
lblEmail2ID.Text = Emails("id2")
End Sub
是的,有点像 hack,但我觉得我不应该仅仅为了将一些数据加载到字典或数组或其他东西中而制作特殊方法。
【问题讨论】: