2012-01-09 5 views
3

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

Словарь является довольно основным

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

Класс пользователя содержит 2 атрибуты, идентификатор пользователя (Integer) и Имя пользователя (String).

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

Аргумент 'Prompt' не может быть преобразован в тип 'String'.

ответ

4

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

Fix:

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 в разделе «Пользователи, имя.

Обновление класса пользователей:

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 
+0

Спасибо за ответ. Кажется, что все работает хорошо, но не выводит содержимое класса (1, Simon), а просто имя класса. Я предполагаю, что это связано с необходимостью переопределить функцию ToString? Мой класс выглядит следующим образом Класс Пользователи Private _p1 As String Private _p2 As String Sub New (ByVal p1 As String, ByVal p2 As String) 'TODO: Низкоур.инициализ член _p1 = p1 _p2 = p2 End Sub Конец класса – Simon

+0

@ user1139093 Я обновил ответ. Вы должны серьезно подумать о том, чтобы дать вашим переменным лучшие имена. p1 и p2 ничего не передают. Кроме того, я изменил p1 на целое число. Если это должна быть строка, вам нужно изменить свой словарь как (String, String) вместо integer. – LarsTech

+0

Еще раз спасибо за ответ. Я только начинаю пытаться справиться со всем этим, поэтому я определенно переименую свои переменные с лучшими именами. Еще раз, спасибо! – Simon

1

Здесь вы идете.

 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. Например, предположим, что есть ID и имя в этом классе:

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 
1
For Each kvp As KeyValuePair(Of Integer, Users) In x 
      Console.WriteLine("Key = {0}, Value = {1}", _ 
       kvp.Key, kvp.Value) 
     Next kvp 

Нечто подобное, имея в виду, что ваша стоимость будет возражать а пользователи, и что, как сказал @LarsTech, вы должен передавать целое число вместо строки в словарь

Смежные вопросы