2010-05-03 5 views
1

BindingList를 복사하는 가장 좋은 방법은 무엇입니까?C# BindingList를 복사하는 가장 좋은 방법은 무엇입니까?

그냥 ForEach()를 사용 하시겠습니까? 아니면 더 좋은 방법이 있습니까?

+0

복사 방법? 다른 목록에? 기본 객체의 동일한 인스턴스 또는 복제 된 새 인스턴스? –

+0

모든 인스턴스를 다른 목록에 복사하려고합니다. – Martijn

+0

Martijn, 깊거나 얕은 복사본을 원하십니까? –

답변

2

Foreach는 가장 쉬운 방법이며, 성능 오버 헤드가있는 경우 최소한입니다.

+1

그리고 이것에 대해서? BindingList list2 = new BindingList (list1.toList()) – Martijn

+0

toList를 디 컴파일하면 거의 동일하게 나타납니다.) – TomTom

+0

이것은 저에게 효과적이었습니다. – TheGateKeeper

1

BindingList에는 IList를 사용할 수있는 생성자가 있습니다. 그리고 BindingList는 IList를 구현합니다. 그래서 그냥 다음을 수행 할 수 있습니다

두 번째 목록을 만듭니다 물론
BindingList newBL = new BindingList(oldBL); 

그 같은 객체에서 단지 점. 실제로 목록의 개체를 복제하려면 더 많은 작업을 수행해야합니다. 삭제 된 대답에서

1

: 영업 깊은 사본을 원하는 경우

다음 객체 직렬화 유효한 옵션이 깊은 비 참조 복제 사본

을 얻을 수 드를 직렬화 .

+0

@Ismail S, 삭제를 취소해야한다고 생각합니다. –

+0

내 구해 주셔서 감사합니다 :). 이 사람들은 나에 대해 나쁜 말을 사용하고 있습니다. – IsmailS

1

목록의 전체 복사본을 얻으려면 직렬화/비 직렬화 경로를 사용합니다. 그것은 잘 작동하지만 검색 화면과 같은 큰 목록에서 성능이 저하되므로 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; 
      } 
     } 
    } 
} 

관련 문제