SORU
3 HAZİRAN 2009, ÇARŞAMBA


C#, varolan bir dizi alt dizi Elde diziler

Bir dizi X 10 element var. Yeni bir dizi dizini 3'ten başlayın ve dizin 7 ile biten X Tüm unsurlar içeren oluşturmak istiyorum. Emin kolay benim için yapacak bir döngü yazabilirim ama benim kod mümkün olduğunca temiz tutmak istiyorum. Ben de aptal zaten var olan yöntemleri yazmak için olduğunu düşünüyorum. Orada C yöntemidir# bunu benim için yapabilir misin?

Böyle bir şey (sahte kod):

Array NewArray = oldArray.createNewArrayFromRange(int BeginIndex , int EndIndex)

Dizi.Kopya ihtiyaçlarımı uymuyor. Yeni dizideki öğeleri klonlar olmak istiyorum. Dizi.kopya sadece C-Tarzı memcpy eşdeğerdir aramıyorum.

CEVAP
3 HAZİRAN 2009, ÇARŞAMBA


Bir uzantı yöntemi olarak ekleyebilirsiniz:

public static T[] SubArray<T>(this T[] data, int index, int length)
{
    T[] result = new T[length];
    Array.Copy(data, index, result, 0, length);
    return result;
}
static void Main()
{
    int[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int[] sub = data.SubArray(3, 4); // contains {3,4,5,6}
}

< / ^ hr .

Re klonlama özgün soru açık değildi) güncelleyin. Eğergerçektenderin bir klon istiyorum; gibi bir şey

public static T[] SubArrayDeepClone<T>(this T[] data, int index, int length)
{
    T[] arrCopy = new T[length];
    Array.Copy(data, index, arrCopy, 0, length);
    using (MemoryStream ms = new MemoryStream())
    {
        var bf = new BinaryFormatter();
        bf.Serialize(ms, arrCopy);
        ms.Position = 0;
        return (T[])bf.Deserialize(ms);
    }
}

Bu nesneleri seri hale getirilebilir ([Serializable] ISerializable) gerçi olmasını gerektirir. Kolay -*, DataContractSerializer, *9 protobuf-net, vb uygun olarak başka bir seri hale getirici için yedek olabilir.

Derin klon özellikle seri hale getirme;, ICloneable çoğu durumda güvenmek zordur zor olduğunu unutmayın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Paul Schroder

    Paul Schrode

    30 Kasım 2007
  • SerienTrailerMP

    SerienTraile

    7 HAZİRAN 2012
  • WhtButterflyLiz

    WhtButterfly

    14 NİSAN 2008