variable tipos tipo numerica inicializar datos datatype asignacion alfanumericas c# performance resharper

tipos - variable numerica c#



C#''var'' palabra clave versus variables explícitamente definidas (4)

Esta pregunta ya tiene una respuesta aquí:

Actualmente estoy usando la versión de prueba de 30 días de ReSharper, y hasta ahora me han impresionado las sugerencias que hace. Sin embargo, una sugerencia me desconcierta.

Cuando defino explícitamente una variable, como por ejemplo:

List<String> lstString = new List<String>();

ReSharped agrega una pequeña línea verde ondulada y me dice que:

Use implícitamente la declaración de variable local.

Si luego sigo su sugerencia, ReSharper cambia la línea de código a:

var lstString = new List<String>();

Entonces, ¿hay algún tipo de ganancia de rendimiento que se tenga al cambiar la List<String> por una var , o es solo una peculiaridad de ReSharper? Siempre me han enseñado que definir de forma explícita una variable, en lugar de usar una dinámica, es más óptimo.


Entonces, ¿hay algún tipo de ganancia de rendimiento que se tenga al cambiar la lista a una var

No, pero esta no es la única razón válida para una refactorización. Más importante aún, elimina la redundancia y reduce el código sin perder claridad.

Siempre me han enseñado que definir de forma explícita una variable, en lugar de usar una dinámica, es más óptimo.

Usted no entiende lo que significa var . Esto no es de ninguna manera dinámico, ya que produce el mismo resultado. Simplemente significa que el compilador calcula el tipo de la variable por sí mismo. Obviamente es capaz de hacerlo, ya que este es el mismo mecanismo que se utiliza para probar la seguridad y corrección del tipo.

También elimina una duplicación de código completamente inútil. Para tipos simples, esto podría no ser mucho. Pero considera:

SomeNamespace.AndSomeVeryLongTypeName foo = new SomeNamespace.AndSomeVeryLongTypeName();

Claramente, en este caso, doblar el nombre no es solo innecesario, sino realmente dañino.


La palabra clave var no declara realmente una variable con un tipo dinámico. La variable todavía está tipada estáticamente, solo deduce el tipo del contexto.

Es un buen atajo cuando tienes un nombre tipo largo (los nombres genéricos pueden ser largos)


Menos tipeo = más productividad :)


Nop. Emiten exactamente la misma IL .

Es solo una cuestión de estilo.

var tiene el beneficio que le facilita cambiar el tipo de retorno de las funciones sin alterar otras partes del código fuente. Por ejemplo, cambie el tipo de IEnumerable<T> de IEnumerable<T> a List<T> . Sin embargo, podría facilitar la introducción de errores.