30 votes

C# 'var' mot-clé contre explicitement les variables définies par l'

Je suis actuellement à l'aide de ReSharper est 30 jours d'essai, et jusqu'à présent, j'ai été impressionné par les suggestions qu'elle fait. Une suggestion qui m'intrigue, c', cependant.

Quand j'définir explicitement une variable, telle que:

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

ReSharped ajoute un peu ondulés et de la ligne verte et me dit:

Utiliser implicitement le type de déclaration de variable locale.

Si je puis suivre sa suggestion, ReSharper les changements de la ligne de code:

var lstString = new List<String>();

Donc, est-il une sorte de gain de performance par la modification de l' List<String> d'un var, ou est-ce simplement une particularité de ReSharper? J'ai toujours été enseigné explicitement la définition d'une variable, plutôt que d'utiliser une dynamique, est plus optimal.

61voto

Konrad Rudolph Points 231505

Donc, est-il une sorte de gain de performance par la modification de la Liste pour une var

Non, mais ce n'est pas la seule raison valable pour un refactoring. Plus important encore, il supprime la redondance, et rend le code plus court, sans aucune perte de clarté.

J'ai toujours été enseigné explicitement la définition d'une variable, plutôt que d'utiliser une dynamique, est plus optimal.

Vous ne comprenez pas ce qu' var moyens. Ce n'est pas en aucune façon dynamique, puisqu'elle produit le même résultat. Cela signifie simplement que le compilateur chiffres le type de la variable par lui-même. Il est évidemment capable de le faire, puisque c'est le même mécanisme utilisé pour tester le type de la sécurité et de l'exactitude.

Il supprime également l'un complètement inutile duplication de code. Pour les types simples, cela pourrait ne pas être beaucoup. Mais pensez-y:

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

Clairement, dans ce cas, doubler le nom n'est pas seulement inutile, mais en fait dangereux.

12voto

Mehrdad Afshari Points 204872

Nope. Ils émettent l' exacte même IL.

C'est juste une question de style.

var a l'avantage qui rend plus facile pour vous de changer le type de retour des fonctions sans altérer les autres parties du code source. Par exemple de changer le type de retour de IEnumerable<T> de List<T>. Toutefois, il pourrait rendre plus facile à introduire des bogues.

8voto

Matt Brunell Points 7120

L' var mot clé n'a pas fait de déclarer une variable avec un type dynamique. La variable est toujours statiquement typé, c'est juste déduit le type du contexte.

Son une belle raccourci lorsque vous avez une longue typename (générique typenames peut être long)

1voto

Martin Clarke Points 3370

Moins de frappe = plus de productivité :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X