Как записать содержимое словаря в MessageBox - PullRequest
3 голосов
/ 09 января 2012

В VB.NET я хочу записать содержимое словаря в окно сообщения.

Словарь довольно простой

    Dim x As New Dictionary(Of Integer, Users)
    x.Add("1", New Users("1", "Simon"))

Класс пользователя содержит 2 атрибута: идентификатор пользователя (целое число) и имя пользователя (строка).

Я пытаюсь написать содержание словаря. Я хотел бы записать каждую словарную запись в строку, но у меня нет успеха, так как я получаю сообщение об ошибке:

Аргумент «Подсказка» не может быть преобразован в тип «Строка».

Ответы [ 3 ]

4 голосов
/ 09 января 2012

Вы передаете строку, в которой вы указали целое число:

Исправление:

Dim x As New Dictionary(Of Integer, Users)
x.Add(1, New Users(1, "Simon"))

Затем, чтобы показать содержимое:

Dim sb As New StringBuilder
For Each item As KeyValuePair(Of Integer, Users) In x
  sb.AppendLine(item.Key & ") " & item.Value.ToString)
Next
MessageBox.Show(sb.ToString())

Ваш класс пользователей будетнеобходимо переопределить функцию ToString или изменить вызов ToString для свойства в Users, которое показывает имя пользователя.

Обновление до класса Users:

Public Class Users
  Private _p1 As Integer
  Private _p2 As String

  Sub New(ByVal p1 As Integer, ByVal p2 As String)
    _p1 = p1
    _p2 = p2
  End Sub

  Public Overrides Function ToString() As String
    Return _p2
  End Function
End Class
1 голос
/ 09 января 2012
For Each kvp As KeyValuePair(Of Integer, Users) In x
            Console.WriteLine("Key = {0}, Value = {1}", _
                kvp.Key, kvp.Value)
        Next kvp

Что-то в этом роде, учитывая, что ваше Значение будет объектом Users и что, как сказал @LarsTech, вы должны передать в словарь целое число вместо строки

1 голос
/ 09 января 2012

Вот, пожалуйста.

        Dim sbMessage As New System.Text.StringBuilder(500)

        For Each wKey As Integer In x.Keys
            sbMessage.Append("Key = ").Append(wKey).Append(", Value = ").Append(x.Item(wKey).ToString()).AppendLine()
        Next
        MessageBox.Show(sbMessage.ToString)

Чтобы сделать это полезным, вам потребуется переопределить метод ToString в классе Users.Например, предположим, что в этом классе есть идентификатор и имя:

Public Overrides Function ToString() As String
    Dim sbText As New System.Text.StringBuilder(500)

    sbText.Append("ID = ").Append(Me.Id).Append(", Name = ").Append(Me.Name)

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