Je parcourais le code C# d'un collègue de travail aujourd'hui et j'ai trouvé ce qui suit :
using (MemoryStream data1 = new MemoryStream())
using (MemoryStream data2 = new MemoryStream())
{
// Lots of code..........
}
J'avais toujours vu le using
suivie d'une paire d'accolades qui définissent la portée de la vie de l'objet. Mon collègue qui a écrit le code a dit que les accolades de l'instruction data1
using
n'étaient pas nécessaires et le code faisait la même chose que s'ils étaient présents et imbriquait l'instruction data2
using
déclaration. Alors, que se passe-t-il lorsque les accolades sont omises ?
2 votes
Bien que vous puissiez le faire, comme le montrent les réponses, je pense que vous ne devriez pas le faire, pour des raisons de lisibilité. Pour moi, c'est comme envelopper les blocs if/else/while/lock/etc. dans des accolades - même s'ils ne sont pas nécessaires, c'est beaucoup plus facile à lire.
15 votes
A mon avis, empilé
using
Les déclarations, comme ci-dessus, sont lejos plus facile à lire que des éléments imbriquésusing
déclarations. En particulier dans les cas où vous enchaînez 3-4 Streams/StreamReaders pour effectuer un seul ensemble d'opérations.3 votes
@Joel : Peut-être que comme toute chose, la situation spécifique doit être prise en considération. Si ce n'était que deux, mon avis est de les emboîter absolument avec un appareil dentaire. Si nous parlons de 4 comme vous le dites, peut-être que stacked est la meilleure approche. Mais la première fois que vous avez besoin d'accéder à data1 avant la création de data2, cela signifie changer la lisibilité du code au lieu de simplement ajouter une ligne de code.
0 votes
@Joe : C'est juste. D'après mon expérience, mon utilisation des choses impliquant
using
Les blocs ont tendance à être plutôt tranchés et secs. Je ne pense pas avoir jamais eu l'occasion d'insérer de la logique entre deux blocs empilés.using
et je dois rarement les modifier de quelque manière que ce soit une fois qu'elles sont écrites.0 votes
Je suis dans l'équipe "pas d'accolades" ou "utiliser la méthode c#8 sans accolades du tout", mais Une autre idée pourrait être de faire toutes vos utilisations imbriquées et de simplement externaliser le code interne vers une méthode. Il est alors très facile à lire.
using (var data1 ...) { using (var data2 ...) { using (var data3 ...) { MethodCall(data1, data2, data3); } } }