Ceci peut être répondu ailleurs, mais après avoir effectué un peu de recherche, je n'ai pas beaucoup trouvé sur le sujet en dehors du Je suis curieux si tous les objets em> créés dans un normalement em> je ferais quelque chose comme ceci: p> Je sais que les deux < Code> conn code> et Je suis curieux si les mêmes règles d'élimination s'appliqueraient à l'instruction suivante: p> serait le aussi ce que être syntaxiquement préféré? Personnellement, je pense que le 2e est plus propre, mais je crois comprendre que la lisibilité peut venir jouer ici aussi. p> p> normal en utilisant le contexte code>.
à l'aide du bloc code> sera éliminé ainsi que l'objet d'origine. P>
cmd code> sortez de la portée à ce stade et sont éliminés en raison du charmant
en utilisant le mot-clé code>. p>
sqlconnection code> objet qui était créé en ligne dans le
à l'aide de code> STATION soit éliminé lorsque
cmd code> est hors de portée et est éliminé car il est associé à l'objet? p>
4 Réponses :
Pour votre deuxième code, Selon la spécification (8.13), dans votre code, Dispose code> ne sera pas appelé sur
SQLConnection code> instance lorsque le flux est laisse
à l'aide de code> Sauf
SQLCOMMAND.Dispose () code> Faites-le en interne (et non, ce n'est pas).
Utilisation (ResourceType ressource = Expression) est transformée en: p>
ressource code> est
sqlcommand code>, et c'est celui-ci
Dispose code> est appelé . p> p>
Ok, alors cela ne serait pas le moyen préféré de gérer cela? Ou existe-t-il un moyen de disposer de l'associé sqlconnection code> dans ce cas?
"Sauf si SQLCOMMAND.Dispose () le faire en interne" - il ne le fait pas en interne.
@Évanl Utilisez deux à l'aide des blocs CODE>, comme dans votre premier code.
Merci, j'ai pensé que c'était le cas (mon instinct me disait "ne le fais pas!") Alors pensais que je demanderais =)
NO. P>
Vous avez besoin d'un en utilisant code> Les instructions s'appliquent uniquement aux ressources déclarées directement dans la déclaration; pas à d'autres allocations de l'initialisateur. p>
distinct à l'aide de la déclaration code> pour chaque ressource. p>
Selon MSDN , ce code:
{ SqlCommand temp = new SqlCommand(commandText, new SqlConnection(ConnectionString)); try { // ... } finally { if (temp != null) ((IDisposable)temp).Dispose(); } }
Certainement, il y a déjà des réponses qui explique cela correctement. Ceci est couvert par la spécification mentionnée par d'autres.
Mais vous pourriez simplement l'essayer. Voici un exemple: p> sortie: p> (bien sûr si vous nichez deux en utilisant Code> Les instructions, comme dans
à l'aide de (var intérieur = nouvelle disposition ("intérieure", null))
{
en utilisant (nouvelle disposition ("extérieure", interne))
{...}} code>, le
Dispose code> est appelé sur les deux objets.) p> p>
@Fabiomarcolini Bah, j'ai eu un sentiment que cela pourrait déjà exister, je ne pouvais tout simplement pas trouver le bon terme de recherche de la bonne recherche.