Pregunta

A menudo tengo que convertir un valor recuperado (generalmente como una cadena), y luego convertirlo en un int. Pero en C # (.Net) debe elegir int16, int32 o int64: ¿cómo sabe cuál elegir cuando no sabe qué tan grande será su número recuperado?

¿Fue útil?

Solución

Todos los que han mencionado que declarar que un Int16 ahorra ram deberían recibir un voto negativo.

La respuesta a su pregunta es usar la palabra clave " int " (o si te apetece, usa "Int32").

Eso le da un rango de hasta 2.4 mil millones de números ... Además, los procesadores de 32 bits manejarán mejor esas entradas ... también (y LA RAZÓN MÁS IMPORTANTE ) es que si planea usando ese int por casi cualquier razón ... probablemente tendrá que ser un " int " (Int32).

En el marco .Net, el 99.999% de los campos numéricos (que son números enteros) son "ints" (Int32).

Ejemplo: Array.Length, Process.ID, Windows.Width, Button.Height, etc., etc., etc. 1 millón de veces.

EDITAR: me doy cuenta de que mi mal humor me va a desestimar ... pero esta es la respuesta correcta.

Otros consejos

Solo quería agregar eso ... Recordé que en los días de .NET 1.1 el compilador estaba optimizado para que las operaciones 'int' fueran realmente más rápidas que las operaciones de bytes o cortas.

Creo que todavía se mantiene hoy, pero estoy realizando algunas pruebas ahora.


EDITAR: Tengo un descubrimiento sorpresa: las operaciones de sumar, restar y multiplicar para abreviar (s) realmente devuelven int!

Intentar repetidamente TryParse () no tiene sentido, ya tiene un campo declarado. No puede cambiar de opinión a menos que haga ese campo de tipo Objeto. No es una buena idea.

Cualquier dato que represente el campo tiene un significado físico. Es una edad, un tamaño, un recuento, etc. Las cantidades físicas tienen restricciones realistas en su rango. Elija el tipo int que puede almacenar ese rango. No intente arreglar un desbordamiento, sería un error.

Al contrario de la respuesta más popular actual, los enteros más cortos (como Int16 y SByte) a menudo ocupan menos espacio en la memoria que los enteros más grandes (como Int32 e Int64). Puede verificar esto fácilmente creando instancias de matrices grandes de sbyte / short / int / long y utilizando perfmon para medir los tamaños de almacenamiento dinámico administrado. Es cierto que muchos sabores de CLR ampliarán estos enteros para optimizaciones específicas de la CPU cuando realicen operaciones aritméticas con ellos y demás, pero cuando se almacenan como parte de un objeto, ocupan solo la cantidad de memoria necesaria.

Por lo tanto, definitivamente debe tener en cuenta el tamaño, especialmente si trabajará con una gran lista de enteros (o con una gran lista de objetos que contienen campos de enteros). También debe considerar cosas como el cumplimiento de CLS (que no permite los enteros sin firmar en los miembros públicos).

Para casos simples como convertir una cadena a un entero, estoy de acuerdo en que Int32 (C # int) generalmente tiene más sentido y es probable que lo que otros programadores esperarán.

Si solo estamos hablando de un par de números, elegir el más grande no hará una diferencia notable en su uso general de RAM y simplemente funcionará. Si está hablando de muchos números, necesitará usar TryParse () en ellos y descubrir el tipo int más pequeño, para guardar ram.

Todas las computadoras son finitas. Debe definir un límite superior en función de lo que cree que serán los requisitos de sus usuarios.

Si realmente no tiene un límite superior y desea permitir valores 'ilimitados', intente agregar las bibliotecas de tiempo de ejecución Java .Net a su proyecto, lo que le permitirá usar la clase java.math.BigInteger, que hace matemáticas en casi -un número entero de tamaño ilimitado.

Nota: Las bibliotecas .Net Java vienen con DevStudio completo, pero no creo que vengan con Express.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top