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

  • 07cadikiz07

    07cadikiz07

    17 EKİM 2007
  • Bad Lip Reading

    Bad Lip Read

    22 Mart 2011
  • Influencer Plus

    Influencer P

    2 Ocak 2013