一千萬個為什麽

搜索

由於LINQ查詢而修改了默認對象


我正在執行以下代碼來過濾對象列表,然後再將其打印出來。

Dim printList As New List(Of dispillPatient)
For Each pat As dispillPatient In patList
    If (From meds In pat.Medication Select meds Where meds.Print = True).Count > 0 Then
        Dim patAdd As New dispillPatient
        patAdd = pat
        patAdd.Medication = DirectCast((From meds In pat.Medication Select meds Where meds.Print = True).ToList, List(Of dispillMedication))
        printList.Add(patAdd)
    End If
Next

正在發生的是 patList ,這是我的初始列表,對於其內部的每個 dispillPatient ,特定患者Medication對象(這是另一個列表)正在縮短到返回 patAdd 對象的列表。

我認為這與.NET在我執行 patAdd = pat 和我正在使用的LINQ查詢時復制 pat 對象的方式有關。有沒有人之前有類似的問題和\或我該怎麽做才能防止我的初始列表被截斷。

最佳答案

patAdd = pat

這是你的問題。這創建 pat 實例的副本,這只會使 patAdd 變量指向與 pat <�相同的實例/ code>變量。

為此,您必須基於 pat 創建一個新的 dispillPatient 對象,並在 patAdd <�中存儲 實例/代碼>。

雖然沒有為這樣做定義特定的習慣用法,但一些常見的方法是復制構造函數:

Public Sub New(source as dispillPatient)
    ' copy whatever is necessary from source, realizing that any
    ' other reference types -- like lists -- also need to be duplicated
    ' in similar fashion
End Sub

或復制/克隆功能

Public Function Clone() As dispillPatient
    Dim output as new dispillPatient

    ' copy whatever is necessary to output, realizing that any
    ' other reference types -- like lists -- also need to be duplicated
    ' in similar fashion

    return output
End Function

轉載註明原文: 由於LINQ查詢而修改了默認對象

猜你喜歡