C#最小化if语句
我对C#还是有点陌生,我想知道如何最小化这段代码 这就是我到目前为止所做的:C#最小化if语句,c#,if-statement,C#,If Statement,我对C#还是有点陌生,我想知道如何最小化这段代码 这就是我到目前为止所做的: private void CheckFiles() { if (!File.Exists(ProgramLocation + "\\Server Files\\" + "Bukkit.jar")) { DownloadBukkitJar(); } else { Close(); } if (!File.Exists(ProgramL
private void CheckFiles()
{
if (!File.Exists(ProgramLocation + "\\Server Files\\" + "Bukkit.jar"))
{
DownloadBukkitJar();
}
else
{
Close();
}
if (!File.Exists(ProgramLocation + "\\dlls\\" + "HtmlAgilityPack.dll"))
{
DownloadHtmlAgilityPackDll();
}
else
{
Close();
}
}
那么,我如何用更少的代码来实现这一点呢 我不确定close()或download函数的作用,但我个人的目标是:
private void CheckFiles()
{
DownloadIfNeeded(ProgramLocation + "\\Server Files\\" + "Bukkit.jar");
DownloadIfNeeded(ProgramLocation + "\\dlls\\" + "HtmlAgilityPack.dll");
}
private void DownloadIfNeeded(string s)
{
if (!File.Exists(s))
{
DownloadFile(s);
}
else
{
Close();
}
}
根据您的品味和编码风格指南,以下可能是合理的尝试:
private void CheckFiles()
{
bool bukkit = File.Exists(string.Format("{0}\\Server Files\\Bukkit.jar", ProgramLocation));
bool htmlap = File.Exists(string.Format("{0}\\dlls\\HtmlAgilityPack.dll", ProgramLocation));
if (!bukkit) DownloadBukkitJar();
if (!htmlap) DownloadHtmlAgilityPackDll();
if (bukkit || htmlap) Close();
}
注释
- 我认为两次调用
是没有意义的Close
- 查看String.Format的用法(在执行之前代码清晰的示例)
注意-在硬编码文件路径时要小心,如果您正在构建路径,则应使用
Path.directoryseportorchar
,或者在组合路径时使用Path.Combine
。这将确保您的路径是特定于平台的,这将使您的代码更易于移植。我更新了示例以演示如何执行此操作。据我所知,您试图将对Close()的两个调用合并到一个块中,这里有一种方法,假设调用Close()的次数无关紧要
bool bukkitExists=File.Exists(ProgramLocation + "\\Server Files\\" + "Bukkit.jar");
bool htmlAgilitPackExists=File.Exists(ProgramLocation + "\\dlls\\" + "HtmlAgilityPack.dll");
if(bukkitExists||htmlAgilitPackExists){Close();}
else{
if (!htmlAgilitPackExists){DownloadHtmlAgilityPackDll();}
if(!bukkitExists){DownloadBukkitJar();}
}
你要结账吗?你真的想关闭它两次吗?有些事情:-使用Path.Combine()连接路径
-在路径、正则表达式模式等前面使用@符号。。。因此,您不必转义“特殊字符”(
-如果前面的语句后面只有一行,则不需要大括号{和}(尽管有些人认为这是错误的代码!)
更多提示取决于上下文:
-根据Close方法的函数,可能始终可以调用它,因此只有两条if语句而没有else语句,只需在CheckFiles()方法的末尾调用Close()。
-连接字符串(如果不是路径)时,请始终使用String.Format方法,而不是“+”符号() 在您的示例中:
private void CheckFiles()
{
if (!File.Exists(Path.Combine(ProgramLocation, @"Server Files\Bukkit.jar")))
DownloadBukkitJar();
else
Close();
if (!File.Exists(Path.Combine(ProgramLocation, @"dlls\HtmlAgilityPack.dll")))
DownloadHtmlAgilityPackDll();
else
Close();
}
我很好奇你为什么关心某些代码的“长度”。如果你观察代码,你应该想办法改进它,从而经常“减少”它……但这是有目的的。@失望先生,我认为如果你的代码很少,程序的性能会更好。我认为这可能毫无意义。代码越简洁,可读性越强。但是简洁和简洁之间有一个微妙的区别。你调用了两次
Close
。这是故意的吗?@Paul Ruane是的,我也是这么想的,但我不知道这种代码是否可行。史蒂文:是的,这是两个独立的函数,如果文件还不存在,它们都可以下载不同的文件。下载后可能应该调用Close(),因为你不知道它是否会有副作用。哇,谢谢这个=O这现在更容易阅读:)+1.当您使用pathcombine时,在tail@sehe-是的,我自己也在想,我想我会用Path.directorysepender
@James更新它以合并,我不会,因为它与问题无关。但是Path.Combine的使用也是如此,这就是为什么我觉得有必要指出inconsistency@sehe-无论如何,OP承认他是C#的新手,因此更新代码以显示更可靠的路径工作方式不会对IMO造成任何伤害。
private void CheckFiles()
{
bool bukkitExists = File.Exists(ProgramLocation + "\\Server Files\\" + "Bukkit.jar");
if (!bukkitExists)
{
DownloadBukkitJar();
}
bool agilityExists = File.Exists(ProgramLocation + "\\dlls\\" + "HtmlAgilityPack.dll");
if (!agilityExists)
{
DownloadHtmlAgilityPackDll();
}
if (bukkitExists || agilityExists)
{
Close();
}
}
private void CheckFiles()
{
if (!File.Exists(Path.Combine(ProgramLocation, @"Server Files\Bukkit.jar")))
DownloadBukkitJar();
else
Close();
if (!File.Exists(Path.Combine(ProgramLocation, @"dlls\HtmlAgilityPack.dll")))
DownloadHtmlAgilityPackDll();
else
Close();
}