SORU
8 Kasım 2008, CUMARTESİ


Neden C# çok Boyutlu diziler uygulamak IEnumerable&değil;T> lt;?

Sadece C çok boyutlu bir dizi olduğunu fark ettim#, IEnumerable uygulamak yok iken. IEnumerable<T> uygulamıyor Tek boyutlu diziler için, hem de IEnumerable<T> IEnumerable uygulanır.

Neden bu fark? Eğer çok boyutlu bir dizi 5**, şüphesiz ise de genel bir sürümü uygulamak gerekir? Fark ettim bu yüzden denedim kullanın Uzatma yöntemi bir çok boyutlu dizi, başarısız sürece kullanın Cast<T> ya benzer; bu yüzden ben kesinlikle görmek için bir argüman yapmak için çok boyutlu bir dizi uygulamak IEnumerable<T>.

Netleştirmek sorumu kod, beklediğiniz için aşağıdaki kodu baskı true dört kez, süre aslında yazdırır true, false, true, true:

int[] singleDimensionArray = new int[10];
int[,] multiDimensional = new int[10, 10];

Debug.WriteLine(singleDimensionArray is IEnumerable<int>);
Debug.WriteLine(multiDimensional is IEnumerable<int>);
Debug.WriteLine(singleDimensionArray is IEnumerable);
Debug.WriteLine(multiDimensional is IEnumerable);

CEVAP
8 Kasım 2008, CUMARTESİ


CLR diziler: iki farklı türü vardırvektörlersıfır olan 0 ve daha genel bir dizi sınır ve bir rütbe dışındaki bağlı bir alt 0 ile tek boyutlu olduğu garanti edilir.

CLİ spec: bölüm 8.9.1

Ayrıca, ile oluşturulan bir vektör eleman tipi, T uygular arayüzü System.Collections.Generic.IList<U> U (madde 8.7),: = T.

Bana oldukça garip görünüyor söylemek zorundayım. Zaten IEnumerable uygulayan verilen IEnumerable<T> uygulamak öyle olmaması için bir sebep göremiyorum. Çok mantıklı IList<T> uygulamaya etmez ama genel arayüzü iyi olurdu.

Eğer bu isterseniz, 18* *(eğer kullanıyorsanız .diyebilirsin ya 3.5 NET) ya dizi boyunca yineleme yapmak için kendi yönteminizi yazın. Her boyutun alt/üst sınırları bulunan kendi yöntemi sen yazmak zorundasın döküm önlemek için, ve işler bu şekilde getirildi. Çok hoş değil.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elefant Traks

    Elefant Trak

    5 HAZİRAN 2007
  • kylediablo

    kylediablo

    8 Ocak 2007
  • mist64

    mist64

    30 Mayıs 2006