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

  • Absolute Zero(Programming Tutorials)

    Absolute Zer

    22 Kasım 2012
  • Mismag822 - The Card Trick Teacher

    Mismag822 -

    18 EKİM 2008
  • New Challenger - Game Reviews

    New Challeng

    20 Temmuz 2006