web-dev-qa-db-fra.com

IDE0059 Affectation inutile d'une valeur à «i»

Ce code produit dans Visual Studio 2019 Message d'information: * Code de gravité Description État du fichier de projet Ligne Suppression État Suppression État Détails Description Message IDE0059

Affectation inutile d'une valeur à "i"

Évitez les affectations de valeur inutiles dans votre code, car elles indiquent probablement des calculs de valeur redondants. Si le calcul de la valeur n'est pas redondant et que vous avez l'intention de conserver l'affectation, remplacez la cible d'affectation par une variable locale dont le nom commence par un trait de soulignement et est éventuellement suivi d'un entier, tel que '_', '_1', '_2 ', etc. Ceux-ci sont traités comme des noms de symboles de défausse spéciaux. *

L'extrait de code fonctionne bien, c'est le message IDE0059, ce qui me dérange. Je ne veux pas le supprimer, si c'est possible.

    private static XmlDocument LoadXmlFromFile(string xmlPath)
    {
        XmlDocument doc = new XmlDocument();
        int i = 2;
        while (true)
        {
            try
            {
                using (Stream fileStream = System.IO.File.Open(xmlPath, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    doc.Load(fileStream);
                }

                return doc;
            }
            catch (IOException) when (i > 0)
            {
                i--;
                Thread.Sleep(100);

            }
        }
    }

Qu'est-ce qui ne va pas ici? Est-ce un faux positif ou je manque quelque chose?

Ce code génère également l'avertissement IDE0059 dans VS2019:

private static XmlDocument LoadXmlFromFile(string xmlPath)
    {
        XmlDocument doc = new XmlDocument();
        int i = 2;
        while (true)
        {
            try
            {
                using (Stream fileStream = File.Open(xmlPath, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    doc.Load(fileStream);
                }

                return doc;
            }
            catch (IOException)
            {
                if (i == 0)
                {
                    throw;
                }
                i--;
                Thread.Sleep(100);
            }
        }
    }
3
Ive

Selon votre description, il semble que vous souhaitiez mettre fin au sommeil lorsque vous traversez

deux exceptions sans lancer l'avertissement.

Je suggère que vous puissiez utiliser si phrase pour le faire.

class Program
{
    static void Main(string[] args)
    {
        string path = "D:\\teest1.xml";
        var doc = LoadXmlFromFile(path);
    }
    private static XmlDocument LoadXmlFromFile(string xmlPath)
    {
        XmlDocument doc = new XmlDocument();
        int i = 2;
        while (i>=0)              // change the while sentence
        {
            try
            {
                using (Stream fileStream = System.IO.File.Open(xmlPath, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    doc.Load(fileStream);
                }

                return doc;
            }
            catch (IOException ex)
            {             
                if (i == 0)
                {
                    throw ex;
                }

                i--;
                Thread.Sleep(200);
            }

        }
        return doc;
    }

}
2
Jack J Jun - MSFT

Le message IDE0059 indique l'affectation de "int i = 2;" est inutile. Pour enregistrer le calcul, utilisez "int i;". Avec i commençant maintenant à la valeur par défaut de zéro (0) et diminuant avec "i--;", modifiez également les comparaisons en "(i> -2)" et "(i == -2)" selon les exemples de code.

0
Rocco