有人能建议一个更好的模式来处理这样的一些步骤吗?
我现在能想到的唯一另一种方法是使用流控制的异常,但我读过它是不可取的,因为它基本上是一个goto语句。
if (FileHandler.CheckIfNewFilesExist(sourceFolderPath))
{
if (FileHandler.MoveFolder(sourceFolderPath, temporyFolderPath))
{
if (CSVHandler.AppendUniqueIdToCSV(temporyFolderPath, filesToBeAppended))
{
FileHandler.CopyFolder(temporyFolderPath, finalFolderPath);
}
}
}
答案 0 :(得分:2)
使用&&
if (FileHandler.CheckIfNewFilesExist(sourceFolderPath)
&& FileHandler.MoveFolder(sourceFolderPath, temporyFolderPath)
&& CSVHandler.AppendUniqueIdToCSV(temporyFolderPath, filesToBeAppended))
{
FileHandler.CopyFolder(temporyFolderPath, finalFolderPath);
}
答案 1 :(得分:2)
你可以很容易地创建一个流畅的界面:
FileHandler.CheckIfNewFilesExist(sourceFolderPath)
.ThenIf(() => FileHandler.MoveFolder(sourceFolderPath, temporyFolderPath))
.ThenIf(() =>
CSVHandler.AppendUniqueIdToCSV(temporyFolderPath, filesToBeAppended))
.ThenDo(() => FileHandler.CopyFolder(temporyFolderPath, finalFolderPath));
他们是:
public static class BooleanEx
{
public static bool ThenIf(this bool @this, Func<bool> that)
{
return @this ? that() : false;
}
public static void ThenDo(this bool @this, Action action)
{
if (@this)
{
action();
}
}
}
答案 2 :(得分:1)
关于展平这些结构的好文章可以在Coding Horror.找到 我没有必要在这里粘贴它。
答案 3 :(得分:1)
在您的情况下,可以使用if
运算符将所有条件合并为一个&&
但如果每个if
块中有一些额外的代码,则可以反转{{1 }}的:
if
您显然必须将代码提取到方法中才能使用if (!FileHandler.CheckIfNewFilesExist(sourceFolderPath))
return;
// Perhaps some more code ...
if (!FileHandler.MoveFolder(sourceFolderPath, temporyFolderPath))
return;
// Perhaps some more code ...
if (!CSVHandler.AppendUniqueIdToCSV(temporyFolderPath, filesToBeAppended))
return;
FileHandler.CopyFolder(temporyFolderPath, finalFolderPath);
。