2

これをより良く見せるにはどうすればよいですか:

lblTotalWorldSize.Text = GetDirectorySize(_worldsDirectory + selectedItem) * 1024 + " kb";    // Total world size
if (Directory.Exists(_worldsDirectory + selectedItem + "\\" + selectedItem))                  // World itself
{
    lblWorldSize.Text = GetDirectorySize(_worldsDirectory + selectedItem + "\\" + selectedItem) * 1024 + " kb";
}
else
{
    lblWorldSize.Text = "Couldn't find world.";
}
if (Directory.Exists(_worldsDirectory + selectedItem + "\\" + selectedItem + "_nether"))      // Nether
{
    lblNetherSize.Text = GetDirectorySize(_worldsDirectory + selectedItem + "\\" + selectedItem + "_nether") * 1024 + " kb";
}
else
{
    lblWorldSize.Text = "Couldn't find world.";
}
if (Directory.Exists(_worldsDirectory + selectedItem + "\\" + selectedItem + "_the_end"))     // The End
{
    lblTheEndSize.Text = GetDirectorySize(_worldsDirectory + selectedItem + "\\" + selectedItem + "_the_end") * 1024 + " kb";
}
else
{
    lblWorldSize.Text = "Couldn't find world.";
}

本当にごちゃごちゃしているようで、このような質問が見つからないようです。

4

5 に答える 5

7

さて、ここで役立つことがいくつかあります。

  • ヘルパー メソッド (毎回「パス」から「サイズ文字列」への同じ変換を実行しています)
  • 条件演算子
  • 共通ローカル変数の抽出

このようなもの:

// Note that _worldsDirectory must be an absolute path)
string prefix = Path.Combine(_worldsDirectory, selectedItem, selectedItem);
lblWorldSize.Text = GetDirectorySizeOrDefault(prefix, "Couldn't find world");
lblNetherSize.Text = GetDirectorySizeOrDefault(prefix + "_nether",
                                               "Couldn't find _nether");
lblTheEndSize.Text = GetDirectorySizeOrDefault(prefix + "_the_end",
                                               "Couldn't find _the_end");

...

static string GetDirectorySizeOrDefault(string directory, string defaultText)
{
    return Directory.Exists(directory)
        ? GetDirectorySize(directory) * 1024 + " kb"
        : defaultText;
}

元のコードが常にlblWorldSize.Textエラー時に割り当てられるという事実を修正したことに注意してください-意図的ではなかったと思います。

于 2012-07-27T18:21:05.983 に答える
2

Path.Combineあなたのように文字列を連結するのではなく、パスの作成に使用してください。

于 2012-07-27T18:24:02.290 に答える
0

読みやすさを向上させるために、意図と変数の置換を使用することをお勧めします。

string dir = "_worldsDirectory + selectedItem";
string dirItemPath = @"_worldsDirectory + selectedItem \\" + selectedItem;

// Total World Size
lblTotalWorldSize.Text = GetDirectorySize(_worldsDirectory + selectedItem) * 1024 + " kb";

// World itself
if (Directory.Exists(dirItemPath)) {

    lblWorldSize.Text = GetDirectorySize(dirItemPath) * 1024 + " kb";
} else {

     lblWorldSize.Text = "Couldn't find world.";
}

// Nether
if (Directory.Exists(dirItemPath + "_nether")) {

    lblNetherSize.Text = GetDirectorySize(dirItemPath + "_nether") * 1024 + " kb";
} else {

    lblWorldSize.Text = "Couldn't find world.";
}

// The End
if (Directory.Exists(dirItemPath + "_the_end")) {

    lblTheEndSize.Text = GetDirectorySize(dirItemPath + "_the_end") * 1024 + " kb";
} else {

    lblWorldSize.Text = "Couldn't find world.";
}
于 2012-07-27T18:29:47.790 に答える
0

この方法が複数のことを行う可能性はありますか?おそらく他のいくつかの方法でこれをリファクタリングすることができます。

于 2012-07-27T18:22:53.740 に答える
0
lblTotalWorldSize.Text = GetDirectorySize(_worldsDirectory + selectedItem) * 1024 + " kb";    // Total world size

DoOnDirectoryExists(lblWorldSize, "");    
DoOnDirectoryExists(lblNetherSize, "_nether");    
DoOnDirectoryExists(lblWorldSize, "_the_end");    


//Change the name to something more appropriate to your program, same with the LBL type and tempString
public bool DoOnDirectoryExists(LBL lbl, string suffix)
{
    string tempString = _worldsDirectory + selectedItem + "\\" + selectedItem + suffix;

    if (Directory.Exists(tempString))     
    {
         lbl.Text = GetDirectorySize(tempString) * 1024 + " kb";
    }
    else
    {
        lblWorldSize.Text = "Couldn't find world.";
    }
}

煩雑さを取り除き、コードを読みやすくするための最良の方法-コードの重複を削除します。

于 2012-07-27T18:32:49.260 に答える