88 votes

Y a-t-il une différence entre myVar retour vs retour (mavar) ?

Je regardais quelques exemples de code c# et remarqué qu’un exemple enveloppé le retour dans ()'s.

J’ai toujours tout fait :

Y a-t-il une différence faisant :

230voto

Eric Lippert Points 300275

Mise à JOUR: Cette question a été l'objet de mon blog le 12 avril 2010. Merci pour ce drôle de question!

Dans la pratique, il n'y a pas de différence.

En théorie, il pourrait y avoir une différence. Il y a trois points intéressants dans la spécification C# où cela pourrait présenter une différence.

Tout d'abord, la conversion des fonctions anonymes, de déléguer des types et des arbres d'expression. Considérez les points suivants:

Func<int> F1() { return ()=>1; }
Func<int> F2() { return (()=>1); }

F1 est clairement juridique. Est - F2? Techniquement, pas de. La spec dit dans la section 6.5, qu'il y a une conversion à partir d'une expression lambda compatibles type de délégué. C'est qu'une expression lambda? Pas de. C'est une mise entre parenthèses de l'expression qui contient une expression lambda.

Visual C# compilateur fait une petite spec violation d'ici et les rejets de la parenthèse pour vous.

Deuxième:

int M() { return 1; }
Func<int> F3() { return M; }
Func<int> F4() { return (M); }

F3 est légal. Est - F4? Pas de. La Section 7.5.3 indique qu'une mise entre parenthèses de l'expression ne peut pas contenir une méthode de groupe. Encore une fois, pour votre confort, nous violer la spécification et de permettre la conversion.

Troisième:

enum E { None }
E F5() { return 0; }
E F6() { return (0); }

F5 est légal. Est - F6? Pas de. La spécification précise qu'il n'y est une conversion de l'littéral de zéro à n'importe quel type énuméré. "(0)" n'est pas la traduction littérale de zéro, c'est une parenthèse suivi de la lettre zéro, suivi d'une parenthèse. Nous violer la spécification ici, et permettent à tout moment de la compilation expression constante égale à zéro, et pas seulement littérale de zéro.

Donc dans tous les cas, nous vous permettons de sortir avec elle, même si, techniquement, cela est illégal.

40voto

Il y a des cas de coin quand la présence de parenthèses peut influer sur le comportement du programme :

1.

2.

3.

Espère que vous ne verrez jamais cela dans la pratique.

26voto

JaredPar Points 333733

Non, il n’y aucune différence autre que syntaxique.

3voto

Bryan Points 1839

Une bonne façon de répondre à des questions comme il s’agit d’utiliser réflecteur et voir ce qu’IL soit généré. Vous pouvez apprendre beaucoup sur les optimisations du compilateur et autres par décompilation des assemblys.

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