2012-04-03 14 views
2

私はまだC#で​​少し新しく、このコードを最小限に抑える方法が不思議でした。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(); 
    } 
} 

は、どのように私は、少ないコードでこれを作ることができますか?

+4

なぜ私は好奇心が強いですいくつかのコードの '_length_'に関係しています。あなたがコードを観察するならば、それを_improve_する方法を見つけなければならないので、しばしばそれを減らします...しかし目的のために。 –

+0

@失望私は、あなたが少しのコードを持っていれば、プログラムはより良い結果を出すと思った。おそらく私は思っていません。 –

+0

より簡潔なコードは、より読みやすいコードです。しかし、簡潔な*と*小さな*の間には微妙な違いがあります。 –

答えて

3
private void CheckFile(string path, Action actionIfMissing) 
{ 
    if (!File.Exists(path)) 
    { 
     actionIfMissing(); 
    } 
    else 
    { 
     Close(); 
    } 
} 

public void CheckFiles() 
{ 
    var bukkitPath = Path.Combine(ProgramLocation, String.Format("{0}{1}{2}", "Server Files", Path.DirectorySeparatorChar, "Bukkit.jar"); 
    CheckFile(bukkitPath, DownloadBukkitJar); 
    var htmlAgilityPackPath = Path.Combine(ProgramLocation, String.Format("{0}{1}{2}", "dlls", Path.DirectorySeparatorChar, "HtmlAgilityPack.dll"); 
    CheckFile(htmlAgilityPackPath, DownloadHtmlAgilityPackDLL); 
} 

ノートの使用で

  • ルック有意義ではなかったと仮定 - ハードコーディングする際に警戒しますパスを構築している場合、またはパスを結合する場合はPath.Combineを使用する場合は、Path.DirectorySeparatorCharを使用する必要があります。これにより、コードがより移植性の高いものになるような、プラットフォーム固有のパスが確保されます。私はこれを行う方法を示すために例を更新しました。

    私はあなたが単一のブロックでclose()をするために2つのコールを統合しようとしている理解して何から
  • +0

    +1、素敵です。サンクの作成は必要ですか? –

    +0

    @StefanHanke - ナーあなたの右の良い点。 – James

    +0

    うわー、これはありがとう= Oこれは今読まれるほうがずっと簡単です:)! +1! –

    1

    は私が近い()またはdownloadfunctionsが何をするかわからないけど、個人的に私はこのような何かを目指します:スタイルガイドラインをあなたの好みに応じて、およびコーディング

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

    を、以下では合理的であるかもしれません試み:

    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の(パフォーマンスの前にコードをわかりやすくの一例)
    +1

    Close()は、副作用があるかどうかわからないので、ダウンロード後に呼び出されるべきです。 – Slugart

    +1

    @Slugart Duh ...おそらくそうではありません。 OPのコードを参照してください: – sehe

    0

    は、ここに呼び出された回数を閉じる()関係ないと仮定し、そうするための方法だ

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

    あなたはフォームを閉じていますか?あなたは本当にそれを2回閉じたいですか?

    0

    いくつかの点:
    - Path.Combineを使用してパスを連結(http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspx
    - ...パス、正規表現パターンの前に@記号を使用しますので、あなたは「特殊文字」をエスケープする必要はありません(
    - によって:! - http://en.csharp-online.net/CSharp_FAQ%3A_What_does_at_sign_identifier_mean
    中括弧{と}は、一部の人々は、このように不正なコードを見ても唯一のラインが(前述の文を以下の場合)、コンテキストに応じ

    その他のヒントを必要とされていませんCloseメソッドの関数を呼び出すことができますelse文がないif文が2つしかなく、CheckFiles()メソッドの最後にClose()を呼び出すだけです。
    - 文字列を連結する(そうでない場合はパス)、常にあなたの例ではString.Formatのメソッドの代わりに「+」記号(http://msdn.microsoft.com/en-us/library/system.string.format.aspx

    を使用します。

    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(); 
    } 
    
    関連する問題