[C#]Analyse de code -> warning CA2000
Bonjour,
Je viens d'installer VS2010 version trial, pour me faire une idée et surtout parce que des fonctionnalités de C#4 m'intéressent.
Je migre un code en cours de développement qui fonctionne.
Par curiosité, je lance l'analyse de code, et j'obtiens pour plusieurs blocs de code un warning CA2000.
Par exemple, pour le bloc qui suit, j'obtiens :
Citation:
Avertissement 2 CA2000 : Microsoft.Reliability : Dans la méthode 'MdiMain.MdiMain()', l'objet 'item' n'a pas été supprimé dans tous les chemins d'accès d'exception. Appelez System.IDisposable.Dispose sur l'objet 'item' avant que toutes les références s'y rapportant ne soient hors de portée. D:\Visual_Studio\C#\Domogest\Domogest\MdiMain.cs 153 Domogest
Je comprends parfaitement ce que ça veut dire, mais l'ennui est que le bloc concerné est ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| // Pour chaque valeur de langue listée dans l'Enum Langages
foreach (Langages langue in Enum.GetValues(typeof(Langages)))
{
// construire un item basé sur le nom correspondant à la valeur et lui affecter un événement
var item = new ToolStripMenuItem( Enum.GetName(typeof(Langages),langue), null, new EventHandler(tsmiLangage_Click));
// Cocher si correspond aux préférences actuelles
item.Checked = langue == Langue;
// Tag = valeur -> facilite le traitement dans le menu
item.Tag = langue;
// Placer l'item dans Préférences->Langages
tsmiLangue.DropDownItems.Add(item);
} |
Et bien entendu, si j'ajoute un
après le .add(item), ben évidemment je détruis l'item de menu que je viens de créer, et donc je n'ai plus aucun item créé en sortie de la boucle.
Or, la msdn m'indique que je dois absolument utiliser un dispose :
Citation:
Ne supprimez pas d'avertissement de cette règle, à moins que vous ayez appelé une méthode sur votre objet qui appelle Dispose, tel que Close.
Ai-je raté quelque chose, est-ce que ma façon de procéder est incorrecte, ou est-ce l'analyseur de code qui est un peu "fantaisiste"?
Merci d'avance
Claude