Duplicates possibles: strong>
Quel est le point du mot-clé Var?
Utilisation du mot-clé Var en C # P> blockQuote>Je comprends comment
iEnumerable <...> code> pour un type de données peut rendre le code un peu moins lisible ou la manière dont les génériques imbriqués peuvent sembler un peu décourageant. Mais en dehors de la lisibilité du code, y a-t-il des avantages d'utiliser Var au lieu du type explicite? Cela semble en utilisant le type explicite, vous feriez mieux de transmettre ce que la variable est capable parce que vous savez ce que c'est. P>
S'il s'agit d'une norme de codage en milieu de travail, je l'utilise pour le travail d'équipe. Dans mes propres projets Cependant, je préfère éviter l'utilisateur de var. P>
9 Réponses :
Il ne produit aucun changement significatif dans l'IL émis. Il est simplement une préférence de style de code. P>
I, pour un, comme, surtout lorsqu'ils traitent avec des types qui ont de longs noms génériques, presque illisibles tels que Dictionnaire
J'aime bien, surtout dans les tests unitaires, car car le code évolue, je n'ai que de réparer le côté droit de la déclaration / mission. Évidemment, je dois également mettre à jour pour refléter les changements d'utilisation, mais au point de la déclaration, je n'ai que de faire un changement. P>
Ceci est la principale raison I var code> la sortie de mon code.
Le var code> est juste un sucre syntaxique. Il est toujours connu au moment de la compilation de quel type la variable est. Il n'y a pas d'autres avantages d'utiliser le mot-clé Var. P>
Eh bien, il y a certains i> d'autres avantages. Par exemple, être capable de stocker une référence à une instance de type anonyme et être en mesure de faire référence aux propriétés. (c'est-à-dire le résultat d'une requête LINQ à l'aide d'une clause SELECT pour créer des objets ad-hoc)
Utiliser var code> car la variable itératrice d'un bloc de foresach est plus sûre que les noms de type explicite. Par exemple,
foreach ( var x in col ) {
Console.WriteLine(x.Name);
}
objet code> ne contient pas de champ
nom code>. Sûr que ça marche?
Problème n ° 1: Si var x code> résout à
objet code>, vous ne pouvez pas accéder à la propriété code> nom code>. Vous devez toujours lancer.
@Anthonypegram je suis venu à la même conclusion être n'était pas positif i>
@xander, @anthony Le point que j'essaie de faire est qu'il n'y a que 2 résultats avec l'utilisation de var code> 1) compile = aucun problème de distribution d'exécution ou 2) ne compilera pas
Gotcha, vous ne dites pas que cela ne donnera pas une erreur d'exécution, juste la distribution n'est pas nécessaire au moment de la compilation en ce qui concerne la 1ère case ...
Ce serait si son collection (qui n'est pas montré) est de type ienumerable
@Matthew a relu la réponse ...
@xander, si vous regardez les blocs de code, il n'y a aucune affectation pour la variable code> Col code>. Donc, vous n'avez aucune idée du type de variable. Il pourrait très bien être list
itemcollection: iEnumerable code>.
@Matthew Tu ne vois toujours pas ça? "Vaya con Dios ..."
Il n'y a pas de réelles différences. Certaines personnes suggèrent d'utiliser le type explicite car il peut faciliter la maintenance du code. Cependant, des personnes qui poussent pour Bien sûr, si vous utilisez des VARS dans l'intention d'avoir de bonnes conventions de nommage et qui se décompose, c'est plus douloureux sur la route. (Imo) p> var code> ont la position qui "si nous utilisons var, nous sommes obligés d'utiliser de bonnes conventions de dénomination". p>
À mon avis, de bonnes conventions de codage sont plus importantes lors de l'utilisation de «Var» que de bonnes conventions de dénomination. Tout ce qui est déclaré «Var» est dans la méthode actuelle. Tant que les méthodes sont assez concises (comme elles devraient être), il ne devrait pas être terriblement difficile de déterminer ce que la variable se réfère.
Outre l'aspect de la lisibilité que vous avez mentionné, "Var" bénéficie également de la réduction de la probabilité qu'un changement de code trivial brise d'autres parties de votre code. Si vous renommez un type, par exemple. Ou si vous passez à un autre type qui est principalement compatible avec le type précédent (par exemple, changer de FOO [] à iEnumérable) Vous avez beaucoup moins de travail à faire pour récupérer votre code à un état compilable. P>
Le point de var est de permettre des types anonymes, sans qu'il ne serait pas possible et c'est la raison pour laquelle il existe. Toutes les autres utilisations que je considère comme codage paresseux. P>
Paresseux? Il atteint la même fonction avec moins de coups de clé. Du point de vue de l'application, c'est une efficacité crue.
@Gusdor On pourrait faire valoir qu'il est un peu plus difficile de voir le type si c'est défini implicitement. J'ai tendance à suivre le modèle de: Si le type est long et convoluté par exemple. Quelque chose
Un autre avantage de var est que vous n'avez pas besoin d'ajouter une déclaration en utilisant. Par exemple Var Cars = getcars (); Il n'est pas nécessaire d'ajouter "à l'aide de nomspace.car" que vous devriez faire si vous avez remplacé Var avec voiture.
La paresse = l'efficacité globale "Je choisis une personne paresseuse à faire un travail difficile. Parce qu'une personne paresseuse trouvera un moyen facile de le faire. " - Bill Gates
public IAwesome { string Whatever { get; } } public SoCool : IAwesome { public string Whatever { get; } } public HeyHey { public SoCool GetSoCool() { return new SoCool(); } public void Processy() { var blech = GetSoCool(); IAwesome ohYeah = GetSoCool(); // Now blech != ohYeah, so var is blech and ohYeah is IAwesome. } }
+1 parce que "Blech! = Ohyeah, alors Var est Blech et Ohyeah est Iawesome" m'a fait sourire
Vous pouvez abstraire la complexité mentale des techniques pour se concentrer uniquement sur le domaine problématique de votre modèle. Vous devez vous assurer que vos variables sont nommées de manière significative. p>
Stackoverflow.com/search?q=[C%23]+var
var code> est l'incarnation de tout le mal. Je le considère avec une haine bouillante en dehors des types anonymes et des résultats de la requête. Maintenant, demandez-moi de
dynamique code>. Vas-y.
@Anthony pegram ne l'utilise pas alors.
Dès que nous avons déménagé à Visual Studio 2008, le reste de l'équipe de devis que je travaille a commencé à utiliser Var pour tout ce qu'ils ont déclaré. Je déteste le mot-clé, je déteste le débogage de leur code et, finalement, leur code me prend deux fois plus de temps pour voir ce qu'ils tentaient de réaliser. Ce ne serait pas si mal s'ils n'écrivaient pas les fonctions et les méthodes de plus de 500 lignes de longues longues, jonchées avec le mot-clé Var de Var ne doivent être utilisées que par les développeurs qui écrivent un code de nettoyage croustillant et testent leur code avant de le préserver dans la source. contrôler!!
Type Inference Souvent Améliore i> Clarté en supprimant la chaudière qui n'ajoute pas à la lisibilité du code.
Aussi une dupe de: Stackoverflow.com/Questtions/41479/use-of-var -keyword -in-c
@Peter: Cela ressemble à "var" n'est pas la source réelle du problème avec ce code.
C'est complètement une chose de style. Il n'y a pas d'avantage car le compilateur aura le même résultat de toute façon.
@kirk, ouais je suis le concanier de code ici, un rôle qui devient vite fatiguant !! (Si seulement je n'avais pas de paiements hypothécaires lol) @david, vous avez droit le mot-clé Var n'est pas la cause première, mais cela n'aide pas la matière. Je suppose qu'un autre aspect qui peut être mauvais est si elle est utilisée dans un environnement à base de réflexion, un refactoring de code pourrait soudainement un changement de comportement qui ne serait pas ramassé car le mot clé var change de type en conséquence. Ive a vu des implémentations à des endroits précédents où l'audit a été effectué par la marche de graphique réfléchissante et effectuée par une méthode d'audit (Object Obj).
@Jimmyhoffa en utilisant
var code> ne change pas la dactylographie forte. Le compilateur sait toujours quel est le type de variable.
@agarwaen Oh mon Dieu, je ne peux pas croire que je disais cela il y a 4 ans. Supprimé ce commentaire. Depuis que j'ai appris Haskell et Wish .Net pourrait déduire des types (que je reconnais est statique toujours) plus i> ...