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

  • CaptainDisillusion

    CaptainDisil

    18 EYLÜL 2007
  • GirlSanctuaryBlog

    GirlSanctuar

    28 Aralık 2011
  • SignatureSeries

    SignatureSer

    24 Aralık 2006