2010-11-27 17 views
1

ハッシュテーブルの配列を作成しようとしています。私はこれが最高の解決策であるかどうかは分かりませんが、PHPでは多目的配列を行うだけですが、.NETではそれほど簡単ではありません。私はかなり新しいVBのですので、もしこれが良い解決策があれば説明してください。VB.NET配列/ハッシュテーブルの問題

連絡先に2つの電子メールフィールドがあり、連絡先には複数の電子メールフィールドがあります。私はちょうど編集ページの最初の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. 

それは構築し、私はそれがうまくいくかもしれないと思いました。私は明示的にテキストボックスフィールドを設定する必要があるので、私のデータソースをループすることはできません。これを行うより良い方法がありますか?または、ハッシュテーブルの配列を作成する方法はありますか?

EDIT - ここで良いのコードは次のとおりです。 だから私は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 

wはハックのSOええ、種類を行ってきましたが、私が作ることにしていなければならないような気がしません。いくつかのデータを辞書や配列などにロードするための特別なメソッドです。

答えて

1

はいPhilさんは、あなたが配列の初期サイズを指定していないのは間違いありません。

そして彼により示唆されるようにハッシュテーブルの最初の構築ジェネリックリストを使用するか、私は

「System.Collections.Specialized.StringCollection」クラスまたは「System.Collections.Specialized.HybridDictionary」クラス

+0

私はハイブリッド辞書が好きです...投稿の編集でコードを投稿します – KacieHouser

2

VB.NETの配列はPHPとは異なります。配列の要素を設定しようとする前に、配列のサイズをに定義する必要があります。

もっと一般的なList<T>コレクションの使用を検討してください。

0

をお勧めしますし、配列を作成します。

Dim hash As New Hashtable() 
    hash.Add("Header", shortModel) 
    hash.Add("SpecInfo", specinfo) 
    hash.Add("SerialNumber", serie & "-L") 
    hash.Add("SerialNumber2", serie) 
    hash.Add("seriel", serie & "-L") 
    hash.Add("serie", serie) 
    hash.Add("Product", modelBase) 
    hash.Add("varBC", bc) 
    hash.Add("box_id", boxId.Substring(4).ToString) 

    Dim dt As DataTable = DbUtil.GetCursor("SFISM4.PKG_AGENCY.sp_get_print_param", {New OracleParameter("in_serie", "3CE5151ZW4")}) 
    For Each row As DataRow In dt.Rows 
     hash.Add(row("NAME"), row("VALUE")) 
    Next 


    Dim mArray(hash.Count() - 1, 1) As String 
    Dim i As Integer = 0 

    For Each row As DictionaryEntry In hash 
     mArray(i, 0) = row.Key.ToString() 
     mArray(i, 1) = row.Value.ToString() 
     i = i + 1 
    Next