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 :

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 : 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);
            }
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 :

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