web-dev-qa-db-fra.com

Pourquoi devrais-je utiliser var au lieu d'un type?

Duplicate possible:
ReSharper et var

Après avoir installé ReSharper, il demande (par des avertissements) que j'utilise var autant que possible, par exemple

UnhandledExceptionEventArgs ue = (UnhandledExceptionEventArgs) t;

ReSharper veut le transformer en

var ue = (UnhandledExceptionEventArgs) t;

J'aime mieux la première version, y a-t-il une raison de préférer var ? meilleure performance? n'importe quoi? ou est-ce juste un style de code?

147
IAdapter

C'est vraiment juste un style de codage. Le compilateur génère exactement la même chose pour les deux variantes.

Voir aussi ici pour la question de performance:

102
Martin Buberl

Quand vous dites "par avertissements", que voulez-vous dire exactement? Je l'ai généralement vu suggérer que vous peut voulez utiliser var, mais rien d'aussi dur qu'un avertissement.

Il n'y a pas de différence de performances avec var - le code est compilé dans le même IL. L’avantage potentiel réside dans la lisibilité - si vous avez déjà précisé le type de variable cristallin dans le RHS de la tâche (par exemple, via un casting ou un appel de constructeur), quel avantage y at-il à le faire également dans le LHS? C'est une préférence personnelle cependant.

Si vous ne voulez pas que R # suggère d'utiliser var, changez simplement les options. Une chose à propos de ReSharper: c’est très configurable :)

34
Jon Skeet

Comme les autres l'ont dit, il n'y a aucune différence dans le code compilé (IL) lorsque vous utilisez l'un des éléments suivants:

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

Je suppose que Resharper vous met en garde car il est [à mon avis] plus facile de lire le premier exemple que le second. D'ailleurs, quel est le besoin de répéter le nom du type deux fois?

Considérez ce qui suit et vous obtiendrez ce que je veux dire:

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

Il est beaucoup plus facile de lire ceci à la place:

var y2 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5));
15
Alex Essilfie

Dans dans ce cas c'est juste un style de codage.

L'utilisation de var n'est nécessaire que pour les types anonymes.
Dans d’autres situations, c’est une question de goût.

14
Henk Holterman