Guten Tag zusammen,
ich habe immer wieder das Gefühl, das mein Code an "Unsauberkeit" kaum zu übertreffen ist.
Was natürlich nicht gerade für Übersicht sorgt. Daher die Frage, kann man den nachfolgenden Code nicht übersichtlicher bzw. kürzer gestalten?
string programDataPath = @"C:\ProgramData\folder\";
string programDataTempPath = @"C:\ProgramData\folder\Temp";
string programDataTemplatePath = @"C:\ProgramData\folder\Template";
if (!Directory.Exists(programDataPath))
{
Directory.CreateDirectory(programDataTempPath);
Directory.CreateDirectory(programDataTemplatePath);
} else if (!Directory.Exists(programDataTempPath) || !Directory.Exists(programDataTemplatePath))
{
if (!Directory.Exists(programDataTempPath))
{
Directory.CreateDirectory(programDataTempPath);
} else
{
Directory.CreateDirectory(programDataTemplatePath);
}
}
Beste Grüße,
Patrick
Die if-Abfragen kannst Du komplett weglassen und einfach immer Directory.CreateDirectory aufrufen.
string programDataTempPath = @"C:\ProgramData\folder\Temp";
string programDataTemplatePath = @"C:\ProgramData\folder\Template";
Directory.CreateDirectory(programDataTempPath);
Directory.CreateDirectory(programDataTemplatePath);
Siehe auch MSDN
Any and all directories specified in path are created, unless they already exist or unless some part of path is invalid. If the directory already exists, this method does not create a new directory, but it returns a T:System.IO.DirectoryInfo object for the existing directory.
Noch eine Ergänzung:
Wenn du nach if oder else nur eine Anweisung hast, kannst du dir die Klammern auch sparen. Das ändert zwar an der "systematischen Sauberkeit" des Codes wenig, macht ihn aber übersichtlicher/lesbarer:
if (!Directory.Exists(programDataTempPath))
Directory.CreateDirectory(programDataTempPath);
else
Directory.CreateDirectory(programDataTemplatePath);
2+2=5( (für extrem große Werte von 2)
macht ihn aber übersichtlicher/lesbarer:
Ich behaupte das Gegenteil. Und jetzt?
Macht also - wie immer - wenig Sinn eigene Styles als Empfehlung für Generelles zu nennen.
Bei den meisten Open Source Projekten sind (bis auf throws am Methodenkopf) Klammern genau deswegen vorgeschrieben (Microsoft intern in den meisten Teams übrigens auch, siehe auch Microsoft GitHub Repos).
Zumindest ich/wir orientieren uns genau an solche sehr weit verbreiteten, wenn auch an ungeschriebene Gesetze.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo patrick.schultz,
wieso machst du dir nicht eine Methode, die das einfach prüft?
Du willst ja wohl einfach sicherstellen, dass die Ordner erstellt sind, oder?
Irgendwie sowas wie
public void EnsureDirectoryCreated(string directory)
{
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
}
einfach mal runtergetippt hier im Editor. Die rufst du einfach auf und dann werden die Ordner erstellt.
Ist das eine Option? Finde ich lesbarer und die Klammern tun keinem weh 😉
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Macht ja kein Sinn, weil das Exists ja intern von CreateDirectory schon aufgerufen bzw. implizit durchgeführt wird.
Dadurch doppelst Du ja die Exists-Prüfung.
Und vom Naming her wäre es EnsureDirectoryExists
:-)
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo zusammen,
erstmal vielen Dank für die Antworten, ich bin überwältigt.
Was das Weglassen der Klammern betrifft, empfinde ich es ähnlich wie Abt.
Aber das ist ein subjektives Empfinden.
Jedoch hat mich der Vorschlag von Emmu dazu gebracht, darüber nachzudenken, ob es mit einem ? Operator nicht noch übersichtlicher wird. Das scheint so aber nicht zu funktionieren?
Directory.Exists(programDataTempPath) ? Directory.CreateDirectory(programDataTempPath) : Directory.CreateDirectory(programDataTemplatePath);
Der ternäre operator macht nie etwas übersichtlicher.
Aber schau doch nochmal was du da programmiert hast ( ternäre op aufgedröselt ).
if( Directory.Exists(programDataTempPath) )
Directory.CreateDirectory(programDataTempPath) :
else
Directory.CreateDirectory(programDataTemplatePath);
Macht doch keinen Sinn, oder?