De acuerdo con la documentación de vs: MakeArrayType()
representa una matriz dimensional con un límite inferior de cero. MakeArrayType(1)
representa una matriz con un número específico de dimensiones. Por ejemplo, si UnderlyingSystemType es int
, el tipo de devolución de MakeArrayType()
es System.Int32[]
y el tipo de devolución de MakeArrayType(1)
es System.Int32[*]
.
Cuál es la diferencia entre esos tipos.Diferencia entre .MakeArrayType() y .MakeArrayType (1)
Respuesta
Hay una diferencia sutil entre .MakeArrayType()
y .MakeArrayType(1)
como ha visto en el tipo que se devuelve (Int32[]
versus Int32[*]
). De acuerdo con la documentación para .MakeArrayType()
:
Nota: El tiempo de ejecución de lenguaje común hace una distinción entre los vectores (es decir, matrices unidimensionales que siempre están basados en cero) y matrices multidimensionales. Un vector, que siempre tiene una sola dimensión , no es lo mismo que una matriz multidimensional que ocurre con tiene solo una dimensión. Esta sobrecarga de métodos solo se puede usar para crear tipos de vectores, y es la única manera de crear un tipo de vector. Utilice la sobrecarga del método MakeArrayType (Int32) para crear tipos de matriz multidimensionales . Source
Así que cuando se llama a .MakeArrayType()
devuelve un vector (que es una cosa especial que siempre tiene una dimensión). Llamar al .MakeArrayType(1)
hace una matriz multidimensional (no un Vector) - simplemente sucede que solo tiene una dimensión única.
La diferencia entre un Vector y un Array es bastante técnica, pero básicamente los Vectores reciben un trato especial por parte del CLR, de modo que hay instrucciones adicionales de IL que funcionan con ellos y que pueden hacerlos más eficientes. Para obtener más información acerca de la diferencia entre matrices y vectores, consulte: http://markettorrent.com/community/7968#Vectors vs. Arrays
Bien respondido. Esto me llamó la atención hace un tiempo: http://marcgravell.blogspot.com/2010/03/when-is-int-not-int.html –
Cosas extrañas. Incluso las convenciones de nomenclatura aquí son inconsistentes: el vector se llama 'Int32 [*]' las matrices se llaman 'Int32 []' y 'Int32 [,]'. – CodesInChaos
- 1. ¿Diferencia entre Struts 1 y Struts 2?
- 2. Diferencia entre char y char [1]
- 3. Diferencia entre ASP.NET MVC 1 y 3
- 4. Diferencia entre TimerTask y Executors.newScheduledThreadPool (1)
- 5. ¿Cuál es la diferencia entre 1 y '1 en Lisp?
- 6. Diferencia entre $ 1 vs% 1 en .htaccess
- 7. BASH: diferencia entre "exportación k = 1" frente a "k = 1"
- 8. ¿Cuál es la diferencia entre Lisp-1 y Lisp-2?
- 9. Diferencia entre cocos2d-android y cocos2d-android-1
- 10. ¿Cuál es la diferencia entre \ 1 y $ 1 en una expresión regular de Perl?
- 11. ¿Cuál es la diferencia entre LIST.append (1) y la LISTA DE LISTA = + [1] (Python)
- 12. Haskell: ¿Cuál es la diferencia entre (+1) y (\ x-> x + 1)?
- 13. ¿Cuál es la diferencia entre list [-1:] [0] y list [len (list) -1]?
- 14. Diferencia entre @ (posedge Clk); a <= 1'b1; y @ (posedge Clk) a <= 1'b1;
- 15. ¿Cuál es la diferencia entre Array (1) y el nuevo Array (1) en JavaScript?
- 16. ¿Diferencia entre == y caso?
- 17. $ 1 y \ 1 en Ruby
- 18. rendimiento entre varchar (1) vs char (1)
- 19. MySQL: diferencia entre ', `,' y"
- 20. Diferencia entre objeto y *?
- 21. Diferencia entre. y #
- 22. La diferencia entre $ * y $ @
- 23. Diferencia entre & y &
- 24. ¿Cuál es la diferencia entre: 1. (ajaxStart y ajaxSend) y 2. (ajaxStop y ajaxComplete)?
- 25. Diferencia entre sqrtf y sqrtf
- 26. Diferencia entre borrar y eliminar
- 27. VBA: Diferencia entre y y +
- 28. Diferencia entre -Wconversion entre gcc y g ++
- 29. Diferencia entre RSCRIPT y Littler
- 30. Diferencia entre bash pid y $$
El mayor problema es que C# no admite directamente las matrices int [*], debe utilizar Array. El siguiente gran problema es que el jitter puede generar código mucho mejor para int [] ya que sabe por adelantado que solo hay una dimensión. –