このコードは、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);
}
}
}
あなたの説明によると、あなたはあなたが通過したときに睡眠を終了したいようです
警告をスローせずに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;
}
}
メッセージIDE0059は、「int i = 2;」の割り当てを示しています。不要です。計算を保存するには、「int i;」を使用します。 iがデフォルトのゼロ(0)から始まり、「i--;」で減少するので、コード例ごとに比較を「(i> -2)」と「(i == -2)」に変更します。