Итерация коллекции в VB .Net (как будто это был ассоциативный массив!) - PullRequest
2 голосов
/ 08 февраля 2012

Я не использую .Net, если мне не нужно, и для этого проекта я должен. Мне нравится способ работы PHP, но, похоже, я застрял с использованием Collection из Object для хранения / извлечения данных, которые мне нужны. У меня Collection загружен с моими Objects и кодом для перебора коллекции, моя проблема в том, что я не могу получить «ключ», как он будет называться в PHP (я считаю, что в этом случае это собственно название объекта). Рассмотрим следующий пример:

            Dim xDoc As XPathDocument = New XPathDocument(fName)
            Dim xNav As XPathNavigator = xDoc.CreateNavigator()

            Dim sender As XPathNodeIterator
            sender = xNav.Select("/data/sender/val")
            While (sender.MoveNext())
                SenderInfo.Add(sender.Current.GetAttribute("n", ""), sender.Current.Value)
            End While

            For Each item As Object In SenderInfo
                Dim value As String = item.ToString()
                //need to store the key here
                Dim key As String = Nothing
            Next

Как видите, я перемещаюсь по документу XML и создаю Object с некоторыми парами ключ / значение. Объект выглядел бы примерно так, если бы он был в формате JSON:

{"name":"John Smith","address1":"123 Anywhere St.","city":"This City","state":"FL"}

Когда я выполняю итерацию по Коллекции, я могу получить только значение объекта, но мне нужно Key, в этом случае я хочу, чтобы "name", "address1", "city", "state" были сохранены в переменной для каждой итерации.

Есть идеи? Или я поступаю неправильно?

Заранее спасибо за помощь, я действительно застрял на этом!

Ответы [ 2 ]

5 голосов
/ 08 февраля 2012

SenderInfo должно быть Dictionary<String,String>. Ниже приведена документация и пример кода , включая VB.NET.

3 голосов
/ 08 февраля 2012

Сейчас трудно быть уверенным в том, что вы хотите сделать с этим кодом, и это может изменить мир к тому, что я бы порекомендовал сделать вместо этого.Но, похоже, вам действительно нужен такой класс:

<Serializable()>
Public Class Sender

    Public Property Name
    Public Property Address1
    Public Property City
    Public Property State

End Class

А затем замените существующий код на что-то вроде этого:

Dim xmlRdr As New Xml.Serialization.XmlSerializer(GetType(Sender))

Using fileStream As New StreamReader(fName)
     Dim mySender As Sender = xmlRdr.Deserialize(fileStream)
End Using

Возможно, вам понадобится еще несколько атрибутовв классе, чтобы настроить то, как десериализатор ожидает, что XML будет выглядеть.Подробнее о сериализации вы можете прочитать здесь:
http://msdn.microsoft.com/en-us/library/ms950721.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...