【问题标题】:Passing lists from WCF to WCF in VB在VB中将列表从WCF传递到WCF
【发布时间】:2011-08-25 06:23:02
【问题描述】:

我正在尝试从另一个列表中填充一个列表。我认为这段代码应该可以工作,但最终我会得到一个相同项目的列表。

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 = 二

lstReason(2).Reason = 三

但是,当我在这个子例程中设置断点(加载后)时,我得到以下输出:

tmplstReason(0)._reason = 三

tmplstReason(0)._reason = 三

tmplstReason(0)._reason = 三

怎么了???有什么想法吗?

谢谢, 杰森

【问题讨论】:

    标签: vb.net wcf list for-loop each


    【解决方案1】:

    您需要在循环内创建LetterReason 的新实例并将新实例添加到列表中。试试这个

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

    【讨论】:

      【解决方案2】:
      tmplstReason._reason = LetterReason.Reason
      tmplstReasons.Add(tmplstReason)
      

      仔细看。您实际上并没有更改 tmplstReason,而是更改了它的 ._reason 属性。然后将 tmplstReason 添加到列表中 3 次。

      结果是您实际上每次都将相同的东西添加到列表中,并且每次都更改该对象的 ._reason 变量。因为它们都是一样的,所以它们都具有相同的价值。 :)

      【讨论】:

        猜你喜欢
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多