Peut-être est pas 100% vrai que cela est acceptable ...
Si vous arrive d'être usings de nidification et retour à partir d'un imbriquée , ça pourrait ne pas être sûr.
Prenez cet exemple:
using (var memoryStream = new MemoryStream())
{
using (var textwriter = new StreamWriter(memoryStream))
{
using (var csv = new CsvWriter(textwriter))
{
//..write some stuff to the stream using the CsvWriter
return memoryStream.ToArray();
}
}
}
je passais dans un DataTable être produit comme csv. Avec le retour au milieu, il écrivait toutes les lignes dans le flux, mais le csv sorti manquait toujours une ligne (ou plusieurs, selon la taille de la mémoire tampon). Cela m'a dit que quelque chose ne fermait pas correctement.
La bonne façon est de vous assurer que tous les usings précédents sont disposés correctement:
using (var memoryStream = new MemoryStream())
{
using (var textwriter = new StreamWriter(memoryStream))
{
using (var csv = new CsvWriter(textwriter))
{
//..write some stuff to the stream using the CsvWriter
}
}
return memoryStream.ToArray();
}
Juste j'étais sur le point de modifier ma question sur le point que vous avez mentionné. Merci. – tafa
S'il vous plaît, aidez-moi à comprendre pourquoi c'est mauvais. Je voudrais retourner un flux que j'utilise dans une fonction d'aide à une autre fonction pour le traitement d'image. Il semble que le Stream sera éliminé si je fais cela? –
@JohnShedletsky Dans ce cas, votre appel de fonction doit être enveloppé avec. Comme si vous utilisiez (Stream x = FuncToReturnStream()) {...} et pas d'utilisation à l'intérieur de FuncToReturnStream. –