2010-05-03 65 views
1

複製BindingList的最佳方法是什麼?C#複製BindingList的最佳方法是什麼?

只要使用ForEach()?或者有更好的方法嗎?

+0

複製如何?進入另一個列表?基礎對象的相同實例或克隆的新實例? – 2010-05-03 10:13:10

+0

我想複製所有實例到其他列表 – Martijn 2010-05-03 10:14:23

+0

Martijn,你想要一個深層還是淺層的副本? – 2010-05-03 10:25:52

回答

2

Foreach幾乎是最簡單的方法,如果有的話,性能開銷最小。

+1

這又如何? BindingList list2 = new BindingList(list1.toList()) – Martijn 2010-05-03 10:15:30

+0

如果你反編譯toList,你會發現它幾乎相同;) – TomTom 2010-05-03 10:23:18

+0

這是爲我工作的,投票給你的。 – TheGateKeeper 2012-04-14 14:40:34

1

BindingList有一個可以帶IList的構造函數。而BindingList實現IList。所以,你可以做到以下幾點:

BindingList newBL = new BindingList(oldBL); 

當然,這會創建第二個列表,在相同的對象只是點。如果你真的想克隆列表中的對象,那麼你必須做更多的工作。

1

從已刪除的答案:

序列化,則對象反序列 得到了深刻的分身無參考 副本

這是一個有效的選擇,如果在OP想深副本。

+0

@Ismail S,我認爲你應該取消刪除。 – 2010-05-03 10:31:52

+0

感謝您來拯救我:)。這些人對我使用壞話。 – IsmailS 2010-05-03 10:52:26

1

我們使用Serialize/De-serialize路由獲取列表的深層副本。它運行良好,但它確實會在較大的列表中降低性能,例如搜索屏幕,所以我會避免在包含超過5000個項目的列表中使用它。

 
using System; 
using System.IO; 
using System.Runtime.Serialization.Formatters.Binary; 

namespace ProjectName.LibraryName.Namespace 
{ 
    internal static class ObjectCloner 
    { 
     /// 
     /// Clones an object by using the . 
     /// 
     /// The object to clone. 
     /// 
     /// The object to be cloned must be serializable. 
     /// 
     public static object Clone(object obj) 
     { 
      using (MemoryStream buffer = new MemoryStream()) 
      { 
       BinaryFormatter formatter = new BinaryFormatter(); 
       formatter.Serialize(buffer, obj); 
       buffer.Position = 0; 
       object temp = formatter.Deserialize(buffer); 
       return temp; 
      } 
     } 
    } 
} 

相關問題