Pourquoi ne peut-on pas définir une variable dans une instruction if?

Peut-être cette question a été répondu avant, mais le mot if se produit si souvent, il est difficile d'en trouver.

L'exemple n'a pas de sens (l'expression est toujours vrai), mais il illustre ma question.

Pourquoi est-ce code valide:

StringBuilder sb;
if ((sb = new StringBuilder("test")) != null) {
    Console.WriteLine(sb);
}

Mais ce code n'est pas:

if ((StringBuilder sb = new StringBuilder("test")) != null) {
    Console.WriteLine(sb);
}

J'ai trouvé une question similaire concernant un while déclaration. La accepté de répondre, il dit que, dans un while déclaration, il serait dire que la variable est définie dans chaque boucle. Mais pour ma if déclaration exemple, qui n'est pas le cas.

Quelle est donc la raison pour laquelle nous ne sommes pas autorisés à le faire?

  • La déclaration de la Variable est une instruction. Les Conditions l'exigent, une expression qui a une valeur, quelque chose que les déclarations ne sont pas et n'ont pas.
  • Jeff est sur place. Lire sur les liens suivants. Déclarations: msdn.microsoft.com/en-us/library/ms173143(v=VS.100).aspx les Expressions: msdn.microsoft.com/en-us/library/ms173144(v=VS.100).aspx
  • eh bien, alors changer le spec-à-dire qu'une déclaration de variable peut être utilisée comme une expression. Ce n'est pas une raison fondamentale pour laquelle cela ne peut pas être. C++ est-il juste comme ça.
  • Qui est presque arrivé en C#6, mais a été tiré jusqu'à ce que j'ai compris en faveur de la construction d'une meilleure spécification pour une utilisation avec le pattern matching. Cela va changer dans une prochaine version de C#, mais pas possible dans les versions actuelles.
  • Voir stackoverflow.com/questions/33180221/... pourquoi cela a été abandonnée pour C# 6
InformationsquelleAutor comecme | 2011-07-02