VB.NET Array / Hashtable Issue - PullRequest
       3

VB.NET Array / Hashtable Issue

1 голос
/ 28 ноября 2010

Я пытаюсь создать массив хеш-таблиц.Я не знаю, является ли это лучшим решением, в 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

ТАК да, вродевзломать, но я не чувствую, что мне нужно создавать специальные методы просто для загрузки некоторых данных в словарь или массив или что-то еще.

Ответы [ 3 ]

2 голосов
/ 28 ноября 2010

Массивы в VB.NET отличаются от PHP. Вам нужно будет определить размер вашего массива , прежде чем попытается установить элементы массива.

Еще лучше, рассмотрите возможность использования общей коллекции List<T>.

1 голос
/ 28 ноября 2010

Да, Фил прав, вы не указали начальный размер массива.

И по его предложению Используйте общий список, или я бы порекомендовал

Класс "System.Collections.Specialized.StringCollection" или класс "System.Collections.Specialized.HybridDictionary"

0 голосов
/ 11 августа 2015

Сначала создайте хеш-таблицу, а затем массив.

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...