2011-08-14 12 views
10

vs belgelerine göre: MakeArrayType() bir alt sıfır bağlanmış olan tek boyutlu dizisini temsil eder. MakeArrayType(1), belirtilen sayıda boyut içeren bir diziyi temsil eder. Örneğin, UnderlyingSystemType int ise, MakeArrayType() dönüş türü System.Int32[] ve MakeArrayType(1) dönüş türü System.Int32[*]'dur.
Bu türler arasındaki fark nedir? Eğer döndürülen türü (Int32[*] karşı Int32[]) den gördüğümüz gibifark (1)

+1

Büyük anlaşma [*] diziler, sen Diziyi kullanmak zorunda C# doğrudan int desteklemediği olmasıdır. Bir sonraki en büyük anlaşma, jitter'in int [] için çok daha iyi bir kod üretebilmesidir, çünkü ön tarafın tek bir boyut olduğunu bilir. –

cevap

17

.MakeArrayType() ve .MakeArrayType(1) arasında ince bir fark vardır.

Not: .MakeArrayType() belgelerine göre ortak dil çalıştırma vektörleri arasında bir ayrım yapan ve boyutlu diziler (diğer bir deyişle, her zaman sıfır tabanlı olan bir-boyutlu diziler olan). Her zaman yalnızca bir tane boyutuna sahip olan bir vektör, 'un başına gelen tek boyutlu bir dizi ile aynı değildir, yalnızca bir boyuta sahiptir. Bu yöntem aşırı yükü yalnızca vektör türlerini oluşturmak için kullanılabilir ve vektör tipi oluşturmanın tek yolu budur. çok boyutlu dizi türleri oluşturmak için MakeArrayType (Int32) yöntemi aşırı yükünü kullanın. Eğer .MakeArrayType() çağırdığınızda Source

yüzden (her zaman bir boyuta sahip özel bir şeydir) bir Vector döndürür. .MakeArrayType(1)'u çağırmak çok boyutlu bir dizi (bir Vector değil) yapar - sadece tek bir boyuta sahip olur.

bir Vector ve bir Array arasındaki fark

oldukça teknik olan ama temelde onlarla çalışmak ve bu onları daha verimli hale getirebilecek ek IL talimatları vardır böylece CLR tarafından özel muamele Vektörleri. Diziler ve Vektörler arasındaki fark hakkında daha fazla bilgi için bkz: http://markettorrent.com/community/7968#Vectors vs. Arrays

+0

İyi cevap verdi. Bu beni bir süre geri çekti: http://marcgravell.blogspot.com/2010/03/when-is-int-not-int.html –

+1

Garip şeyler. Buradaki adlandırma kuralları bile tutarsızdır: Vektöre "Int32 [*]" denir. Diziler "Int32 []" ve "Int32 [,]" olarak adlandırılır. – CodesInChaos