2008-11-17 12 views
19

¿Por qué Resharper quiere que cambie la mayoría de las variables al tipo var en lugar del tipo real en el código?Resharper: vars

Respuesta

30

Es solo una opción. Se puede desactivar:

ReSharper -> Opciones -> Inspección de código -> Inspección Gravedad -> Código Redundencies -> Uso de palabras clave 'var' cuando sea posible: cambiar esto a "No mostrar"

También existe la opción de contexto (bombilla) que lo llevará en cada dirección - esto está en ReSharper -> Opciones -> Idiomas -> C# -> Acciones de contexto -> "Reemplaza la declaración de tipo explícita con 'var'"

+0

Supongo que por su conocimiento de Resharper, ¿cree que vale la pena el precio de la licencia? – CSharpAtl

+3

Absolutamente. Lo amo. Por otra parte, para mí, como MVP, el precio de la licencia era de $ 0, por lo que soy parcial;) –

+9

La pregunta es "¿por qué"? – Cherian

0

Vars ayuda a hacer el código más legible dentro de un método, especialmente si usa genéricos.

Como dice Jon, es solo una opción.

+1

No en todos los casos. Considere el ejemplo 'Status satus = foo.DoSomething()'. Escribir esto con 'var' oculta el tipo de devolución real y lo hace más ilegible. 'status' puede ser cualquier cosa, por ejemplo, un int. – Razer

5

Para responder a su pregunta ... porque alguien en JetBrains decidió que esa era la forma "preferida".

Para cambiarlo, sigue la respuesta de Jon. Además, también puede cambiar el comportamiento de ReSharper al hacer Code Cleanup (que uso mucho) bajo la sección Code Cleanup en las opciones de ReSharper. Seleccione "Usar tipo explícito".

+3

Esto es prolly lo único que no me gusta con Resharper, fuera de la caja. IMO promueve mala programación ... pero var vs! Var es una guerra religiosa ... así que cada uno por su cuenta. –

+0

@ Pure.Krome, estoy de acuerdo, pero las respuestas * floatingmarbles * en realidad tienen un poco de sentido :). Te obligará a tener un nombre significativo ... Si tan solo pudiera superar mi mala costumbre de escribir: 'var v = ...' :) – Noctis

6

Por defecto, lo hará "garabato verde" declaraciones de este tipo:

Person p = new Person(); 
^^^^^^ 

Debido a la repetición.

También sugerirá var (pequeño subrayado verde) cuando se puede inferir:

Person p = repository.GetPerson(1); 
¯¯¯ 

En este caso se puede infered debido al tipo de retorno del método GetPerson.

Según lo declarado por Jon Skeet, puede deshabilitar estas sugerencias en las opciones de reafilar.

1

Creo que sugiere las dos formas. Si tiene un tipo explícito, puede cambiarlo a var. Si tiene var - puede cambiarlo a explícito. Solo para que sea más rápido para ti cambiar si crees que es apropiado, por supuesto.

Podría ser bueno utilizar vars, por ejemplo, para variables de bucle, al iterar una colección, etc., cuando el tipo sea "implícito" para usted (siempre está implícito para el compilador, por supuesto, cuando Resharper lo sugiere) y su ausencia no hace que el código sea menos legible. Además, me gusta acortar algunas declaraciones, que pueden crecer bastante tiempo con los genéricos. Me gusta, IList (IDictionary (SomeType)) myVar = List (IDictionary (SomeType))() no perderá mucho si escribe "var" en el lado izquierdo de la tarea.

(Reemplazar parantheses con paréntesis angulares;)

Por supuesto, me gustaría tratar de utilizar VARs con cuidado, para facilitar la lectura y no al revés.

+0

(puedes usar corchetes angulares si lo tienes entre comillas) 'SomeCode '. – mackenir

+0

La conversión a tipo explícito es solo una acción de contexto (al menos en mi R # 5.1.3). Parece que JetBrains prefiere los 'vars'. Pero está bien para mí porque no veo tanto las sugerencias. – thersch

1

Para mí, definitivamente vale la pena el precio ... (incluso si tuviera que pagarlo yo mismo). Pero puede ralentizar su VS. Puede ser realmente lento si tiene archivos como 5000 líneas de código.

Lo que todavía no entiendo es por eso que soy el único en el equipo que lo usa ...

+0

Sí, estoy deseando que llegue la próxima versión, que se supone centrada en el rendimiento. Además, yo también :) – mackenir

+0

Un archivo con 5000 líneas de código - wow. Parece que alguna refactorización podría estar en orden. BTw, puede dividir el archivo de código definiendo clases parciales. –

+0

en realidad tengo uno con 6000. las clases parciales no ayudarían - DNA :) – badbadboy

21

Vi un video de Hadi Hariri, donde estaba presentando Resharper 6.x. Su razonamiento era, si estás forzando a un usuario a usar "var", en realidad lo estás forzando a nombrar la variable de una manera más significativa, de esa manera todos los nombres son legibles y tienen más sentido.

3

Esta es la explicación de la inspección de código wiki JetBrains al respecto: http://confluence.jetbrains.net/display/ReSharper/Use+%27var%27+keyword+when+initializer+explicitly+declares+type

Si ve la clase a la derecha no hay gran necesidad de ver a la izquierda también. También ahorra espacio y reduce el código si el nombre de la clase es bastante largo. Personalmente, no utilizo var para tipos simples como string, int, etc. pero lo uso para algo como var dictionary = new Dictionary<string, int>() para ahorrar espacio.