使用if& amp时使语法更短还有陈述

时间:2017-09-24 16:03:26

标签: c# .net

我目前正在开发一个dll库项目。

if (!Directory.Exists(MenGinPath))
{
    Directory.CreateDirectory(MenGinPath + @"TimedMessages");
    File.WriteAllLines(MenGinPath + @"TimedMessages\timedmessages.txt", new string[] { "Seperate each message with a new line" });
}
else if (!File.Exists(MenGinPath + @"TimedMessages\timedmessages.txt"))
{
    Directory.CreateDirectory(MenGinPath + @"TimedMessages");
    File.WriteAllLines(MenGinPath + @"TimedMessages\timedmessages.txt", new string[] { "Seperate each message with a new line" });
}

正如您所看到的,如果语句Directory.Exists为false,将创建一个特定目录(MenGinPath)。但是,如果相同的路径,另外一个文件是false,则将调用第二个函数。

我的问题如下:有什么方法可以缩短它吗?

因为你可以看到我正在调用两次相同的功能:

Directory.CreateDirectory(MenGinPath + @TimedMessages\timedmessages.txt

File.WriteAllLines(MenGinPath + @"\TimedMessages\timedmessages.txt"))

欢迎任何帮助!!

4 个答案:

答案 0 :(得分:2)

由于CreateDirectory在目录存在时不执行任何操作,因此可以缩短代码。此外,不要使用所有字符串连接来填充代码以创建路径和文件名 在使用适当的方法输入逻辑之前,只需执行一次即可创建文件名和路径名(Path.Combine)。

string messagePath = Path.Combine(MenGinPath, "TimedMessages");
string fileName = Path.Combine(messagePath, "timedmessages.txt");

// call the create even if it exists. The CreateDirectory checks the fact
// by itself and thus, if you add your own check, you are checking two times.
Directory.CreateDirectory(messagePath);

if (!File.Exists(fileName)
     File.WriteAllLines(fileName, new string[] { "Seperate each message with a new line" });

答案 1 :(得分:2)

您不需要检查目录是否存在,因为如果目录不存在,Directory.CreateDirectory会自动创建目录,如果目录已经存在,则不会执行任何操作。

此外,创建目录时不要包含文件名。是的,它不会出错,只是为了清楚起见。

另一个是使用Path.Combine而不是硬编码路径。这将提高代码的可读性。

所以,这就是我能想到的:

<form method='POST' action='{{route('posts.store')}}'>

答案 2 :(得分:0)

这两种情况之间的唯一区别似乎是路径。所以只需在if-else

中获取此路径
const string GroupsPath = @"Groups\timedmessages.txt";
const string TimedMessagesTxt = @"TimedMessages\TimedMessages.txt";

string addPath = null;
if (!Directory.Exists(MenGinPath)) {
    addPath = GroupsPath;
} else if (!File.Exists(Path.Combine(MenGinPath, TimedMessagesTxt))) {
    addPath = TimedMessagesTxt;
}
If (addPath != null) {
    Directory.CreateDirectory(Path.Combine(MenGinPath,  addPath));
    File.WriteAllLines(Path.Combine(MenGinPath, TimedMessagesTxt),
        new string[] { "Seperate each message with a new line" });
}

注意:使用Path.Combine代替字符串连接可以自动添加或删除missig或额外\

答案 3 :(得分:0)

这样的事情会起作用吗?

string strAppended = string.Empty;
if (!Directory.Exists(MenGinPath))
{
    strAppended = MenGinPath + @"Groups\timedmessages.txt";
}
else if (!File.Exists(MenGinPath + @"TimedMessages\timedmessages.txt"))
{
    strAppended = MenGinPath + @"TimedMessages\TimedMessages.txt";
}
else
{
    return;
}
Directory.CreateDirectory(strAppended);
File.WriteAllLines(strAppended, new string[] { "Seperate each message with a new line" });

我发现重用像这样的代码块而不是将它们隐藏在if语句中是一个好主意,因为它使代码维护和调试更容易,并且更不容易错过错误。