web-dev-qa-db-ja.com

IDE0059「i」への不要な値の割り当て

このコードは、Visual Studio 2019情報メッセージで生成されます。

「i」への不要な値の割り当て

コードで不要な値を割り当てることは避けてください。これらは冗長な値の計算を示している可能性があります。値の計算が冗長ではなく、割り当てを保持する場合は、割り当てターゲットを、名前がアンダースコアで始まり、オプションで '_'、 '_ 1'、 '_ 2などの整数が後に続くローカル変数に変更します。 'など。これらは特別な破棄シンボル名として扱われます。*

コードスニペットは問題なく動作します。問題になるのはメッセージIDE0059です。できれば抑えたくない。

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

            }
        }
    }

ここで何が問題なのですか?それは誤検知ですか、それとも何かを見逃していますか?

このコードはまた、VS2019で警告IDE0059を生成します。

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

あなたの説明によると、あなたはあなたが通過したときに睡眠を終了したいようです

警告をスローせずに2つの例外。

If文を使用することをお勧めします。

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

メッセージIDE0059は、「int i = 2;」の割り当てを示しています。不要です。計算を保存するには、「int i;」を使用します。 iがデフォルトのゼロ(0)から始まり、「i--;」で減少するので、コード例ごとに比較を「(i> -2)」と「(i == -2)」に変更します。

0
Rocco