hacer declaraciones si se ven mejor

¿Cómo puedo hacer que esto se vea mejor?

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.";
}

Realmente parece un desastre y parece que no puedo encontrar ninguna pregunta como esta.

preguntado el 27 de julio de 12 a las 19:07

¿Es la asignación a lblWorldSize in cada else ¿un error? -

5 Respuestas

Bueno, hay varias cosas que pueden ayudar aquí:

  • Un método auxiliar (está realizando la misma conversión de "ruta" a "cadena de tamaño" cada vez)
  • El operador condicional
  • Extrayendo una variable local común

Algo como esto:

// 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;
}

Tenga en cuenta que he corregido el hecho de que su código original siempre asigna a lblWorldSize.Text por error, supongo que no fue deliberado.

Respondido 31 Jul 12, 10:07

¿Te gusta hacer una función que pueda verificar cada carpeta? - yuki kutsuya

¡Ya veo! Esto seguro hace que se vea mejor. Por cierto, si lo hago de otra manera (como lo estoy haciendo ahora), ¿será más lento en comparación con tu manera? Solo curiosidad - yuki kutsuya

No estoy seguro de si estar enojado porque publicaste esencialmente la misma respuesta que yo, antes que yo, o estar feliz porque pensé en la misma respuesta que Jon Skeet :) - Michael

Haga utilizan el Path.Combine para la creación de rutas, y no para la concatenación de cadenas como lo hace usted.

Respondido 27 Jul 12, 19:07

¿Es posible que este método haga más de 1 cosas? Tal vez podría refactorizar esto en algunos otros métodos.

Respondido 27 Jul 12, 19:07

Sugeriría usar la intención y la sustitución de variables para mejorar la legibilidad:

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.";
}

Respondido 27 Jul 12, 19:07

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.";
    }
}

La mejor manera de deshacerse del desorden y hacer que su código sea más legible: elimine la duplicación de código.

Respondido 27 Jul 12, 19:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.