SORU
21 EKİM 2008, Salı


Nasıl C genel bir liste klon muyum#?

C nesnelerin genel bir listesi var# ve liste klon istiyoruz. Liste içindeki öğeleri cloneable, ama list.Clone() yapmak için bir seçenek yok.

Bunu çözmenin kolay bir yolu var mı?

CEVAP
21 EKİM 2008, Salı


Eğer elemanları değer türleri, sadece bunu yapabilirsiniz:

List<YourType> newList = new List<YourType>(oldList);

Referans türleri ve derin bir kopyasını istiyorsanız ancak, bazı elementler düzgün ICloneable uygulamak varsayarak), bu gibi bir şey yapabilirsin:

List<ICloneable> oldList = new List<ICloneable>();
List<ICloneable> newList = new List<ICloneable>(oldList.Count);

oldList.ForEach((item) =>
    {
        newList.Add((ICloneable)item.Clone());
    });

Belli ki, her öğe türü uygular ICloneable yukarıdaki jenerik ve cast ICloneable değiştirin.

Öğe türü ICloneable desteklemiyor ama kopya-yapıcı bir varsa, bunun yerine yapabilirsiniz:

List<YourType> oldList = new List<YourType>();
List<YourType> newList = new List<YourType>(oldList.Count);

oldList.ForEach((item)=>
    {
        newList.Add(new YourType(item));
    });

Kişisel olarak, tüm üyeleri derin bir kopyasını garanti etmek için ihtiyaç ICloneable kaçınmak olacaktır. Bunun yerine, kopya yapıcı veya YourType yeni bir örneğini döndürür YourType.CopyFrom(YourType itemToCopy) gibi bir fabrika yöntemini öneririm.

Bu seçeneklerden herhangi bir yöntem (uzantısı veya başka) tarafından sarılmış olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • kruno j

    kruno j

    6 Mayıs 2007