C# 如何防止重复代码
我是一名初学者程序员,感觉自己在重复代码(C# 如何防止重复代码,c#,C#,我是一名初学者程序员,感觉自己在重复代码(DownloadFiles()),如下例所示: var files = DownloadFiles(); var retryCount = 0; while (files == null && retryCount < 3) { retryCount++; Console.WriteLine("Retrying {0} time", retryCount); files = DownloadFiles()
DownloadFiles()
),如下例所示:
var files = DownloadFiles();
var retryCount = 0;
while (files == null && retryCount < 3)
{
retryCount++;
Console.WriteLine("Retrying {0} time", retryCount);
files = DownloadFiles();
}
var files=DownloadFiles();
var-retryCount=0;
while(files==null&&retryCount<3)
{
retryCount++;
WriteLine(“重试{0}次”,retryCount);
files=下载文件();
}
我的应用程序基本上是通过HttpWebrequest下载文件,如果没有检索到文件,应该重试下载3次
我需要你的专家意见:
我正在使用DownloadFiles()重复代码
这段代码能更有效地编写吗
这可能看起来很琐碎,但我想开发良好的编程实践。您可以使用do。。。正如Ben Aaronson所建议的那样:
TypeOfFiles files;
var retryCount = 0;
do
{
files = DownloadFiles();
if (retryCount > 0)
{
Console.WriteLine("Retrying {0} time", retryCount);
}
}
while (files == null && retryCount++ < 3)
TypeOfFiles文件;
var-retryCount=0;
做
{
files=下载文件();
如果(retryCount>0)
{
WriteLine(“重试{0}次”,retryCount);
}
}
while(files==null&&retryCount++<3)
我将retryCount++
移动到内部,而这样你的号码就不会掉下来(与在循环内部这样做相比)。你没有重复你的代码,你已经将下载逻辑封装在一个方法中,并且你正在循环这个方法
糟糕的事情是内联DownloadFiles方法或展开while循环。???档案//函数返回的类型
??? 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)
var-retryCount=0;
做
{
files=下载文件();
如果(retryCount>0)
WriteLine(“重试{0}次”,retryCount);
}while(files==null&&retryCount++<3)
另一种方法是:
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);
}
列出文件;//替换为任何类型的文件
var-retryCount=0;
而((files=DownloadFiles())==null&&retryCount<3)
{
retryCount++;
WriteLine(“重试{0}次”,retryCount);
}
for循环可能看起来更整洁:
var files = DownloadFiles();
for (int retryCount = 0; files == null && retryCount < 3; retryCount++)
{
Console.WriteLine("Retrying {0} time", retryCount);
files = DownloadFiles();
}
及
retryCount
在循环中,但这有待讨论。一般来说,这类事情可能没问题。在这种情况下,您可能希望查看do…while
loop如果不为编译提供一些上下文,您就不能使用var
。OP的代码不会在第一次尝试时打印“重试”。而且,您的代码只会下载3次,而OP的代码会下载4次。@Xiaoy312:我认为它不会运行3次,因为retryCount
上的++
是在计算表达式后完成的(与++retryCount
相反)。请为您的代码解决方案添加一些解释,以供将来参考。@PatrickHofman OP中的代码已经起作用了。问题的关键在于创建一个更具可读性/可维护性的解决方案。在这方面,这个解决方案比OP的要糟糕得多。代码有效并不意味着它是一个好的答案。@Patrickhoffman因此,对代码进行审查并使其变得更糟并不是一个有用的答案,事实上它是一个无用的答案。有一个特定的按钮可以用来表示答案是无用的。这是最后一票。
const maxRetries = 3;
retryCount < maxRetries