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

  • Capcom Unity

    Capcom Unity

    5 NİSAN 2010
  • Dellbear816

    Dellbear816

    4 Mart 2008
  • kndx

    kndx

    11 Mart 2006