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 :
Je comprends parfaitement ce que ça veut dire, mais l'ennui est que le bloc concerné est ceci :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
Et bien entendu, si j'ajoute un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part item.Dispose();
Or, la msdn m'indique que je dois absolument utiliser un dispose :
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"?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.
Merci d'avance
Claude
Partager