我是一名初学程序员,感觉我正在重复代码(DownloadFiles()
),如下例所示:
var files = DownloadFiles();
var retryCount = 0;
while (files == null && retryCount < 3)
{
retryCount++;
Console.WriteLine("Retrying {0} time", retryCount);
files = DownloadFiles();
}
我的应用程序基本上是通过HttpWebrequest`下载文件,并且如果没有检索到文件,则应该重试下载3次。
我需要你的专家意见:
我正在使用DownloadFiles()
这段代码能否更有效地编写?
这看似微不足道,但我想开发出良好的编程实践。
答案 0 :(得分:1)
你可以使用do ... while
作为Ben Aaronson的建议:
TypeOfFiles files;
var retryCount = 0;
do
{
files = DownloadFiles();
if (retryCount > 0)
{
Console.WriteLine("Retrying {0} time", retryCount);
}
}
while (files == null && retryCount++ < 3)
我将retryCount++
移到了while
内,所以你的号码没有下降(相比之下,在循环中这样做了。)
答案 1 :(得分:1)
另一种方法是:
List<File> files; // replace with whatever type files is
var retryCount = 0;
while ((files = DownloadFiles()) == null && retryCount < 3)
{
retryCount++;
Console.WriteLine("Retrying {0} time", retryCount);
}
答案 2 :(得分:0)
您没有重复您的代码,您已经在方法中封装了下载逻辑,并且您正在循环使用此方法。
不好的事情是内联DownloadFiles方法或展开while循环。
答案 3 :(得分:0)
??? files; //type returned by the function
var retryCount = 0;
do
{
files = DownloadFiles();
if (retryCount > 0)
Console.WriteLine("Retrying {0} time", retryCount);
} while (files == null && retryCount++ < 3)
答案 4 :(得分:0)
for循环可能看起来更整洁:
var files = DownloadFiles();
for (int retryCount = 0; files == null && retryCount < 3; retryCount++)
{
Console.WriteLine("Retrying {0} time", retryCount);
files = DownloadFiles();
}
修改:另外: 我通常讨厌&#34;魔术数字&#34; - 没有上下文的常量,例如比较中的3,因为它使代码不易维护。如果您想让用户选择重试次数,则尤其如此。我通常会使用类似的东西:
const maxRetries = 3;
和
retryCount < maxRetries
在循环中,但这是辩论。