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

  • FullMag

    FullMag

    15 ŞUBAT 2007
  • Kat Krazy

    Kat Krazy

    12 Kasım 2010
  • Ordetta Price

    Ordetta Pric

    12 EYLÜL 2011