Передача списков из WCF в WCF в VB - PullRequest
0 голосов
/ 14 мая 2011

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

Public Sub WriteDatFile(ByRef lstReasons As System.Collections.Generic.List(Of LetterReason))
    Dim tmplstReason As New TCPService.LetterReason
    Dim tmplstReasons As New System.Collections.Generic.List(Of TCPService.LetterReason)


    'Load the letter reasons
    For Each LetterReason In lstReasons
        tmplstReason._reason = LetterReason.Reason
        tmplstReasons.Add(tmplstReason)
    Next

    RetVal = .......

End Sub

Теперь, когда я устанавливаю точку останова и проверяю из вызывающего WCF, я получаю это:

lstReason (0) .Reason = One

lstReason (1) .Reason = Two

lstReason (2) .Reason = Three

Но, когда я устанавливаю точку останова (после загрузки) в этой подпрограмме, я получаю следующий вывод:

tmplstReason (0) ._ reason = Three

tmplstReason (0) ._ reason = Three

tmplstReason (0) ._ reason = Three

Что происходит ??? Есть идеи?

Спасибо, Jason

Ответы [ 2 ]

0 голосов
/ 14 мая 2011
tmplstReason._reason = LetterReason.Reason
tmplstReasons.Add(tmplstReason)

Смотри внимательно.Вы на самом деле не меняете tmplstReason, вы меняете его свойство ._reason.Затем вы добавляете tmplstReason в список 3 раза.

В результате вы фактически добавляете одну и ту же вещь в список каждый раз и каждый раз меняете переменную ._reason этого объекта.Поскольку они все одинаковые, они имеют одинаковую ценность.:)

0 голосов
/ 14 мая 2011

Вам необходимо создать новый экземпляр LetterReason внутри цикла и добавить новый экземпляр в список.Попробуйте это

 For Each LetterReason In lstReasons
        Dim tmplstReason As New TCPService.LetterReason
        tmplstReason._reason = LetterReason.Reason
        tmplstReasons.Add(tmplstReason)
    Next
...