2010-03-08 81 views
3

當我試圖跨列表運行枚舉器並執行某些操作時,我正在開發一個小函數。 (下面是我想要做什麼的想法通用列表複製引用而不是創建copiedList

當試圖刪除我有一個「集合無法修改」,其實我醒來後,我意識到,tempList必須剛剛分配myLists引用,而不是myLists的副本。那之後,我試圖找到一種方式來表達

tempList = myList.copy

然而,似乎沒有任何存在??我最後寫一個小了點,然後從剛剛添加的每個項循環myLsit到tempList中,但我會認爲會有另一種機制(如克隆??)

所以我的問題(S):

  • 是我關於tempList假設接收參考MYLIST正確
  • 應該如何列表複製到另一個列表?

    private myList as List (Of something) 
    
    sub new() 
        myList.add(new Something) 
    end sub 
    
    sub myCalledFunction() 
        dim tempList as new List (Of Something) 
        tempList = myList 
        Using i as IEnumerator = myList.getEnumarator 
         while i.moveNext 
          'if some critria is met then 
          tempList.remove(i.current) 
         end 
        end using 
    
    end sub 
    

回答

8

通過編寫tempList = myList您不會複製哦集合,您只能使tempList引用myList。試試這個:dim tempList as new List (Of Something)(myList)

0

試試這個 - 使用LINQ從原來的創建一個新的列表,例如:

Sub Main() 
     Dim nums As New List(Of Integer) 

     nums.Add(1) 
     nums.Add(2) 
     nums.Add(3) 
     nums.Add(4) 

     Dim k = (From i In nums _ 
       Select i).ToList() 

    For Each number As Integer In nums 
     k.Remove(number) 
    Next 
    End Sub 

k然後將未鏈接到源數的新名單。

0

我想如果你調用myCalledFunction(byVal aListCopy as Something),你可以讓框架完成這項工作。

0

如果您的列表由值類型組成,您可以使用在構造函數中傳遞的舊列表創建一個新列表。如果你打算做一個參考對象的深層副本,最好的辦法是讓你的參考類型實現ICloneableexample)。然後你可以遍歷並克隆每個對象,或者你可以添加一個擴展方法(就像這個c#example)。