Zgodnie z dokumentacją vs: MakeArrayType()
reprezentuje jednowymiarową tablicę z dolną granicą zero. MakeArrayType(1)
reprezentuje tablicę o określonej liczbie wymiarów. Na przykład, jeśli UnderlyingSystemType to int
, typem zwrotu MakeArrayType()
jest System.Int32[]
, a typem zwrotu MakeArrayType(1)
jest System.Int32[*]
.
Jaka jest różnica między tymi typami.Różnica między .MakeArrayType() i .MakeArrayType (1)
Odpowiedz
Istnieje subtelna różnica między .MakeArrayType()
i .MakeArrayType(1)
, jak widać z typu, który jest zwracany (Int32[]
versus Int32[*]
). Zgodnie z dokumentacją dla .MakeArrayType()
:
Uwaga: plików wykonywalnych języka wspólnego rozróżnia wektorów (czyli jednowymiarowe tablice, które są zawsze od zera) i tablice wielowymiarowe. Wektor, który ma zawsze tylko jeden wymiar , nie jest tym samym, co wielowymiarowa tablica, która zdarza się mieć tylko jeden wymiar. Przeciążenie tej metody może być używane tylko do tworzenia typów wektorowych i jest to jedyny sposób na utworzenie typu wektorowego. Użyj przeciążenia metody MakeArrayType (Int32), aby utworzyć wielowymiarowe typy tablic . Source
Więc kiedy zadzwonisz .MakeArrayType()
zwraca wektor (który jest specjalnym rzeczą, która zawsze ma jeden wymiar). Wywołanie .MakeArrayType(1)
tworzy tablicę wielowymiarową (a nie wektor) - tak się składa, że ma tylko jeden wymiar.
Różnica między Vectorem i Arrayem jest dość techniczna, ale w zasadzie Wektory otrzymują specjalne traktowanie przez CLR, więc istnieją dodatkowe instrukcje IL, które działają z nimi i które mogą zwiększyć ich wydajność. Aby uzyskać więcej informacji na temat różnicy między tablicami i wektorami, zobacz: http://markettorrent.com/community/7968#Vectors vs. Arrays
Dobrze odpowiedział. To mnie trochę złapało: http://marcgravell.blogspot.com/2010/03/when-is-int-not-int.html –
Dziwne rzeczy. Nawet tutaj konwencje nazewnictwa są niespójne: wektor nazywa się 'Int32 [*]' tablice są nazywane 'Int32 []' i 'Int32 [,]'. – CodesInChaos
- 1. Jest: Różnica między --runInBand i --maxWorkers 1
- 2. Różnica między char i char [1]
- 3. Różnica między $ 1 a% 1 w .htaccess
- 4. Różnica między ~ (x-1) i ~ x + 1, gdy x = 0x80000000
- 5. Jaka jest różnica między (1,) i (1) pytonem
- 6. Jaka jest różnica między O (1) i Θ (1)?
- 7. Jaka jest różnica między zniesieniem/1 i wycofaniem/1?
- 8. Jaka jest różnica między 1..5, [* 1..5] i [1..5] w Groovy?
- 9. Jaka jest różnica między Lisp-1 i Lisp-2?
- 10. Różnica między cocos2d-android i cocos2d-android-1
- 11. Oracle: różnica między max (id) +1 i sequence.nextval
- 12. Lua C API: jaka jest różnica między lua_gettop() i -1?
- 13. Różnica między setTimeout (fn, 0) i setTimeout (fn, 1)?
- 14. Różnica między * ptr + = 1 i * ptr ++ w C
- 15. Różnica między unwrapObservable i()
- 16. Różnica między "**/* /" i "** /"?
- 17. Różnica między | = i^= css
- 18. Composer.phar różnica między | i ||
- 19. Różnica między "% ~ dp0" i ". \"?
- 20. Różnica między ". +" I ". +?"
- 21. MySQL: Różnica między ",", "i"
- 22. wydajność między varchar (1) vs char (1)
- 23. Różnica między (++ i) oraz (i ++)
- 24. różnica między ddply i kruszywo
- 25. Różnica między c() i append()
- 26. Różnica między sqrt i sqrtf
- 27. Różnica między 1.second.from_now i 1.seconds.from_now w bibliotece ActiveSupport Ruby?
- 28. Jaka jest różnica między int x = 1 i int x (1) w C++?
- 29. Jaka jest różnica między LIST.append (1) i list = List + [1] (Python)
- 30. Różnica między Find i FindAsync
Największy problem polega na tym, że C# nie obsługuje bezpośrednio tablic int [*], musisz użyć tablicy Array. Następna największa transakcja polega na tym, że jitter może generować znacznie lepszy kod dla int [], ponieważ wie z góry, że istnieje tylko jeden wymiar. –