Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#最小化if语句_C#_If Statement - Fatal编程技术网

C#最小化if语句

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

我对C#还是有点陌生,我想知道如何最小化这段代码

这就是我到目前为止所做的:

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