2011-02-01 15 views
114

Duplicar posible:
ReSharper and var¿Por qué debería usar var en lugar de un tipo?

Después de haber instalado ReSharper exige (por las advertencias) que utilizo var siempre que sea posible, por ejemplo

UnhandledExceptionEventArgs ue = (UnhandledExceptionEventArgs) t; 

ReSharper quiere convertirlo en

var ue = (UnhandledExceptionEventArgs) t; 

Me gusta la primera versión mejor, ¿hay alguna razón para preferir var? ¿mejor interpretación? ¿cualquier cosa? o es solo un estilo de código?

+0

Otros duplicados http://stackoverflow.com/questions/296783/resharper-vars http: // stackoverflow.com/questions/1010480/why-does-do-resharper-default-to-warning-if-you-dont-declare-using-var http://stackoverflow.com/questions/1873873/why-does-resharper-want-to -use-var-for-everything http://stackoverflow.com/questions/1299045/is-resharper-correct –

+0

-1: Esto ha sido cubierto * por lo que * muchas veces antes, y los duplicados se encuentran fácilmente buscando en el sitio . –

+4

@Greg Beech No estoy de acuerdo, no todo el mundo sabe que es un error de ReSharper, pensé que significaba algo, pero estaba equivocado. – IAdapter

Respuesta

80

Es realmente solo un estilo de codificación. El compilador genera exactamente lo mismo para ambas variantes.

Ver también aquí por la pregunta de desempeño:

+1

Eso es correcto. Pero traté de usar la palabra clave var en VS2010, pero la finalización automática de la sintaxis parece desconcertada algunas veces. Entonces, tal vez con ReShaper no haya ningún inconveniente para usarlo. – Peposh

+0

@Peposh yup .. igual aquí por eso dejé de usarlo ... hasta que comencé a usar ReSharper. – carny666

+3

Dejé de usarlo ya que otra generación de desarrolladores no dejaría de quejarse. Mi defensa era que si habían leído y entendido el código, no había ninguna diferencia. Creo que en realidad hace las cosas más fáciles; Si refactoriza el código y los tipos cambian, no tiene que actualizar sus referencias a lo que haya rediseñado si cambia de tipos, es decir, menos tipeo = menos trabajo. – user1040975

29

Cuando se dice "por las advertencias" lo qué se refiere exactamente? Por lo general, lo he visto dando una pista de que puede querer usar var, pero nada tan duro como una advertencia.

No hay diferencia de rendimiento con var: el código se compila en la misma IL. El beneficio potencial está en la legibilidad: si ya ha hecho que el tipo de la variable sea claro como el cristal en el RHS de la asignación (por ejemplo, mediante un cast o una llamada de constructor), ¿dónde está el beneficio de tenerlo también en el LHS? Sin embargo, es una preferencia personal.

Si no desea que R # sugiera el uso de var, simplemente cambie las opciones. Una cosa acerca de ReSharper: es muy configurable :)

+0

hay una advertencia verde, creo que la pista es cuando hago clic, por ejemplo, en la cadena y puedo hacer algo de magia con ella, pero esto es una advertencia. Después de hacer clic en él se llama "Sugerencia". – IAdapter

+6

@ 01: No diría que una luz verde es una "advertencia". Naranja o rojo, sí ... ¿pero verde? –

+0

si es una cuestión de estilo de codificación, ¿por qué debería importarme? Es una sugerencia, pero para un nuevo usuario como yo parece una advertencia y si no me importara lo cambiaría a var (ReSharper debería saberlo mejor que yo). Creo que el término técnico es "ruido". – IAdapter

10

En este caso sólo es la codificación estilo.

El uso de var solo es necesario cuando se trata de tipos anónimos.
En otras situaciones, es una cuestión de gusto.

+1

pero al igual que muchos frameworks como este ReSharper está forzando su gusto;) – IAdapter

+4

Resharper no está forzando nada. Es una sugerencia. Por eso es verde. –

+0

@Mystere Man al igual que usted no está obligando a nadie a no estar de acuerdo con ReSharper, solo está diciendo que ReSharper siempre tiene la razón. Creo que la mayoría de la gente ve una advertencia verde. – IAdapter

10

Como los otros han dicho, no hay diferencia en el código compilado (IL) cuando se utiliza cualquiera de los siguientes:

var x1 = new object(); 
object x2 = new object; 

supongo ReSharper le advierte porque es [en mi opinión] más fácil para leer el primer ejemplo que el segundo. Además, ¿cuál es la necesidad de repetir el nombre del tipo dos veces?

Considere lo siguiente y obtendrá lo que quiero decir:

KeyValuePair<string, KeyValuePair<string, int>> y1 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5)); 

Es la forma más fácil de leer esto en su lugar:

var y2 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5)); 
+6

La razón por la que preferiría NO utilizar ** var ** es si cometí un error sobre el tipo que espero que se devuelva en el RHS, y luego usar un tipo explícito en el lado izquierdo captará el error. Además, no siempre es obvio al mirar el RHS cuál es el tipo sin Intellisense. En el ejemplo anterior Me inclinaría a añadir una instrucción using ' usando NestedKVP = KeyValuePair > NestedKVP y1 = new NestedKVP ("clave", nueva KeyValuePair ("subclave", 5)) ; ' – JonN

Cuestiones relacionadas