En C #, int
y Int32
son lo mismo, pero he leído varias veces que int
es preferible Int32
sin ninguna razón dada. ¿Hay alguna razón y debería importarme?
c#
variable-types
Graham
fuente
fuente
System.Int32
)When something can be read without effort, great effort has gone into its writing.
Easy writing is hard reading
Respuestas:
ECMA-334 : 2006 C # Especificación del lenguaje (p18):
fuente
Los dos son sinónimo;
int
será un poco más familiar,Int32
hace que la 32 bits sea más explícita para aquellos que leen su código Me inclinaría a usarint
donde solo necesito 'un número entero',Int32
donde el tamaño es importante (código criptográfico, estructuras) para que los futuros mantenedores sepan que es seguro agrandarloint
si es apropiado, pero deben tener cuidado de cambiarloInt32
de la misma manera.El código resultante será idéntico: la diferencia es puramente legible o la apariencia del código.
fuente
Ambos declaran números enteros de 32 bits y, como lo indicaron otros carteles, el que usas es principalmente una cuestión de estilo sintáctico. Sin embargo, no siempre se comportan de la misma manera. Por ejemplo, el compilador de C # no permitirá esto:
pero permitirá esto:
Imagínate.
fuente
enum
para usarint
no es underive
, pero especifica ununderlying type
; ver msdn.microsoft.com/en-us/library/sbbt4032.aspx#code-snippet-2Siempre uso los tipos de sistema, por ejemplo, en
Int32
lugar deint
. Adopté esta práctica después de leer la Programación de .NET Framework aplicada : el autor Jeffrey Richter es un buen caso para usar los nombres de tipo completo. Aquí están los dos puntos que me quedaron:Los nombres de los tipos pueden variar entre los lenguajes .NET. Por ejemplo, en C #,
long
asigna a System.Int64 mientras que en C ++ con extensiones administradas,long
asigna a Int32. Dado que los idiomas se pueden combinar y combinar mientras se usa .NET, puede estar seguro de que usar el nombre de clase explícito siempre será más claro, sin importar el idioma preferido del lector.Muchos métodos de marco tienen nombres de tipo como parte de sus nombres de método:
fuente
List<Tuple<Int32, Boolean>> test = new
, Visual Studio ahora se insertaráList<Tuple<int, bool>>()
. ¿Conoces una manera de cambiar estos autocompletados?var
todo lo posible para reducir la palabrería del código. En esos lugares ocasionales donde el autocompletado entra y escupe en mi piso, me ajusto manualmente, es literalmente uno o dos segundos de mi tiempo.int es una palabra clave de C # y no es ambigua.
La mayoría de las veces no importa, pero hay dos cosas que van en contra de Int32:
fuente
Como ya se dijo,
int
=Int32
. Para estar seguro, asegúrese de usar siempreint.MinValue
/int.MaxValue
al implementar cualquier cosa que se preocupe por los límites del tipo de datos. Suponga que .NET decidió queint
ahora seríaInt64
, su código dependería menos de los límites.fuente
int
64 bits, eso sería como un cambio de última hora que yo no creo que sea posible (o ciertamente sensible) al código defensiva contra tales eventualidades.El tamaño de los bytes para los tipos no es demasiado interesante cuando solo tiene que lidiar con un solo idioma (y para el código que no tiene que recordar sobre desbordamientos matemáticos). La parte que se vuelve interesante es cuando haces un puente entre un idioma y otro, C # a un objeto COM, etc., o estás haciendo algunos cambios de bits o enmascarando y necesitas recordarte a ti mismo (y a tus compañeros de trabajo de revisión de código) del tamaño de los datos.
En la práctica, generalmente uso Int32 solo para recordarme de qué tamaño son porque escribo C ++ administrado (para conectar a C #, por ejemplo), así como C ++ no administrado / nativo.
Siempre que probablemente sepa, en C # es de 64 bits, pero en C ++ nativo, termina en 32 bits, o char es unicode / 16 bits, mientras que en C ++ es de 8 bits. ¿Pero cómo sabemos esto? La respuesta es, porque lo buscamos en el manual y así lo dijo.
Con el tiempo y las experiencias, comenzará a ser más consciente de los tipos cuando escriba códigos para unir entre C # y otros lenguajes (algunos lectores aquí piensan "¿por qué lo harían?"), Pero en mi humilde opinión, creo que es una mejor práctica porque No puedo recordar lo que he codificado la semana pasada (o no tengo que especificar en mi documento API que "este parámetro es un entero de 32 bits").
En F # (aunque nunca lo he usado), definen int , int32 y nativeint . La misma pregunta debería surgir, "¿cuál uso?". Como otros han mencionado, en la mayoría de los casos, no debería importar (debería ser transparente). Pero por mi parte, elegiría int32 y uint32 solo para eliminar las ambigüedades.
Supongo que solo dependerá de qué aplicaciones esté codificando, quién lo esté usando, qué prácticas de codificación siguen usted y su equipo, etc. para justificar cuándo usar Int32.
fuente
No hay diferencia entre
int
yInt32
, pero comoint
es una palabra clave del lenguaje, muchas personas la prefieren estilísticamente (al igual que constring
vsString
).fuente
En mi experiencia ha sido una convención. No conozco ninguna razón técnica para usar int sobre Int32, pero es:
Me gusta especialmente el último. :)
fuente
Siempre uso los tipos con alias (int, string, etc.) al definir una variable y uso el nombre real al acceder a un método estático:
Simplemente parece feo ver algo como int. TryParse (). No hay otra razón para hacer esto que no sea estilo.
fuente
Sé que la mejor práctica es usar int, y todo el código MSDN usa int. Sin embargo, no hay una razón más allá de la estandarización y la coherencia, que yo sepa.
fuente
Aunque son (en su mayoría) idénticos (vea a continuación la diferencia de un [error]), definitivamente debería importarle y debería usar Int32.
El nombre para un entero de 16 bits es Int16. Para un entero de 64 bits es Int64, y para un entero de 32 bits la opción intuitiva es: int o Int32?
La cuestión del tamaño de una variable de tipo Int16, Int32 o Int64 es autorreferenciada, pero la cuestión del tamaño de una variable de tipo int es una pregunta perfectamente válida y las preguntas, no importa cuán triviales, distraigan, conducen a confusión, pérdida de tiempo, obstaculizar la discusión, etc. (el hecho de que esta pregunta exista prueba el punto).
El uso de Int32 promueve que el desarrollador sea consciente de su elección de tipo. ¿Qué tan grande es un int de nuevo? Oh sí, 32. La probabilidad de que el tamaño del tipo se considere realmente es mayor cuando el tamaño se incluye en el nombre. Usar Int32 también promueve el conocimiento de las otras opciones. Cuando las personas no se ven obligadas a reconocer al menos que existen alternativas, resulta demasiado fácil para int convertirse en "EL tipo entero".
La clase dentro del marco destinada a interactuar con enteros de 32 bits se llama Int32. Una vez más, que es: más intuitivo, menos confuso, carece de una traducción (innecesaria) (no una traducción en el sistema, sino en la mente del desarrollador), etc. ¿
int lMax = Int32.MaxValue
oInt32 lMax = Int32.MaxValue
?int no es una palabra clave en todos los lenguajes .NET.
Aunque existen argumentos por los cuales no es probable que cambie, int puede no ser siempre un Int32.
Los inconvenientes son dos caracteres adicionales para escribir y [error].
Esto no compilará
Pero esto:
fuente
No te debe importar. Deberías usar la
int
mayor parte del tiempo. Ayudará a portar su programa a una arquitectura más amplia en el futuro (actualmenteint
es un aliasSystem.Int32
pero eso podría cambiar). Solo cuando el ancho de bits de la variable es importante (por ejemplo: para controlar el diseño en memoria de astruct
) debe usarint32
y otros (con el "using System;
" asociado ).fuente
int es el acceso directo del lenguaje C # para System.Int32
Si bien esto significa que Microsoft podría cambiar esta asignación, una publicación sobre las discusiones de FogCreek declaró [fuente]
"Sobre el problema de 64 bits: Microsoft está trabajando en una versión de 64 bits de .NET Framework, pero estoy bastante seguro de que int NO se asignará a 64 bits en ese sistema.
Razones:
1. El estándar C # ECMA dice específicamente que int es de 32 bits y el largo es de 64 bits.
2. Microsoft introdujo propiedades y métodos adicionales en Framework versión 1.1 que devuelven valores largos en lugar de valores int, como Array.GetLongLength además de Array.GetLength.
Así que creo que es seguro decir que todos los tipos integrados de C # mantendrán su asignación actual ".
fuente
int es lo mismo que System.Int32 y cuando se compila se convertirá en lo mismo en CIL .
Usamos int por convención en C # ya que C # quiere parecerse a C y C ++ (y Java) y eso es lo que usamos allí ...
Por cierto, termino usando System.Int32 cuando declaro importaciones de varias funciones de API de Windows. No estoy seguro de si esta es una convención definida o no, pero me recuerda que voy a una DLL externa ...
fuente
Érase una vez, el tipo de datos int estaba vinculado al tamaño de registro de la máquina objetivo del compilador. Entonces, por ejemplo, un compilador para un sistema de 16 bits usaría un entero de 16 bits.
Sin embargo, por suerte que no vemos mucho de 16 bits más, y cuando 64 bits comenzado a hacer que la gente populares estaban más preocupados por lo que es compatible con el software antiguo y 32 bits había sido por tanto tiempo que para la mayoría de los compiladores un int se supone que tiene 32 bits.
fuente
Recomiendo usar StyleCop de Microsoft .
Es como FxCop , pero por cuestiones relacionadas con el estilo. La configuración predeterminada coincide con las guías de estilo internas de Microsoft, pero se puede personalizar para su proyecto.
Puede tomar un tiempo acostumbrarse, pero definitivamente hace que su código sea más agradable.
Puede incluirlo en su proceso de compilación para verificar automáticamente las violaciones.
fuente
int
YInt32
es lo mismo.int
es un alias paraInt32
.fuente
using int = System.Int32;
directiva para todos sus archivos de código fuente.No te debe importar. Si el tamaño es una preocupación, usaría byte, short, int, luego long. La única razón por la que usaría un int mayor que int32 es si necesita un número mayor que 2147483647 o menor que -2147483648.
Aparte de eso, no me importaría, hay muchos otros elementos de los que preocuparse.
fuente
No importa en la práctica y con el tiempo adoptará su propia convención. Tiendo a usar la palabra clave cuando asigno un tipo, y la versión de clase cuando uso métodos estáticos y tal:
fuente
int
es un alias paraSystem.Int32
, como se define en esta tabla: Tabla de tipos incorporados (Referencia de C #)fuente
Uso int en el caso de que Microsoft cambie la implementación predeterminada para un entero a alguna versión nueva (llamémosla Int32b).
Luego, Microsoft puede cambiar el alias int a Int32b, y no tengo que cambiar ninguno de mis códigos para aprovechar su nueva implementación entera (y con suerte mejorada).
Lo mismo ocurre con cualquiera de las palabras clave de tipo.
fuente
No debería importarle la mayoría de los lenguajes de programación, a menos que necesite escribir funciones matemáticas muy específicas o un código optimizado para una arquitectura específica ... Solo asegúrese de que el tamaño del tipo sea suficiente para usted (use algo más grande que un Int si sabe que necesitará más de 32 bits, por ejemplo)
fuente
No importa. int es la palabra clave del idioma e Int32 es su tipo de sistema real.
Vea también mi respuesta aquí a una pregunta relacionada.
fuente
El uso de Int o Int32 son los mismos Int es solo azúcar para simplificar el código para el lector.
Utilice la variante Nullable Int? o Int32? cuando trabaja con bases de datos en campos que contienen nulo. Eso te ahorrará muchos problemas de tiempo de ejecución.
fuente
Algunos compiladores tienen diferentes tamaños para int en diferentes plataformas (no específicas de C #)
Algunos estándares de codificación (MISRA C) requieren que todos los tipos utilizados tengan un tamaño especificado (es decir, Int32 y no int).
También es bueno especificar prefijos para diferentes variables de tipo (por ejemplo, b para bytes de 8 bits, w para palabras de 16 bits yl para palabras de 32 bits => Int32 lMyVariable)
Debes preocuparte porque hace que tu código sea más portátil y más fácil de mantener.
Portable puede no ser aplicable a C # si siempre va a usar C # y la especificación de C # nunca cambiará a este respecto.
El ihmo mantenible siempre será aplicable, porque la persona que mantiene su código puede no estar al tanto de esta especificación particular de C #, y omitir un error cuando el int ocasionalmente se convierte en más de 2147483647.
En un bucle for simple que cuenta, por ejemplo, los meses del año, no le importará, pero cuando use la variable en un contexto en el que posiblemente podría fluir, debería importarle.
También debería preocuparte si vas a hacer operaciones con bits en él.
fuente
It is also good to specify prefixes for different type variables
La notación húngara está en gran parte desaprobada hoy en día y la mayoría de los estilos de codificación desalientan su uso. Las convenciones internas de las compañías de software también a menudo prohíben esa notaciónEl uso del
Int32
tipo requiere una referencia de espacio de nombresSystem
o calificación completa (System.Int32
). Tiendo haciaint
, porque no requiere una importación de espacio de nombres, por lo tanto, reduciendo la posibilidad de colisión del espacio de nombres en algunos casos. Cuando se compila a IL, no hay diferencia entre los dos.fuente
De acuerdo con la ventana Inmediato en Visual Studio 2012, Int32 es int, Int64 es largo. Aquí está la salida:
fuente
Considere también Int16. Si necesita almacenar un número entero en la memoria en su aplicación y le preocupa la cantidad de memoria utilizada, entonces podría usar Int16 ya que usa menos memoria y tiene un rango mínimo / máximo menor que Int32 (que es lo que es int .)
fuente
Hace un tiempo, estaba trabajando en un proyecto con Microsoft cuando recibimos la visita de alguien del equipo de productos Microsoft .NET CLR. Esta persona codificó ejemplos y cuando definió sus variables usó “Int32” vs. “int” y “String” vs. “string”.
Había recordado haber visto este estilo en otro código de ejemplo de Microsoft. Entonces, investigué un poco y descubrí que todo el mundo dice que no hay diferencia entre "Int32" e "int", excepto el color de sintaxis. De hecho, encontré una gran cantidad de material que sugiere que use "Int32" para que su código sea más legible. Entonces, adopté el estilo.
¡El otro día encontré la diferencia! El compilador no le permite escribir enum usando "Int32", pero sí cuando usa "int". No me preguntes por qué porque aún no lo sé.
Ejemplo:
Esto funciona.
Tomado de: notación Int32 vs. int
fuente