1

下面是我用来计算文件夹中文件的代码片段(只是文件,而不是其他文件夹)。如果此文件夹中有多个文件,我需要抛出异常。

private bool CheckCondition2(String FolderName)
{
    bool ConditionPassed = false;

    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(FolderName);
    int count = dir.GetFiles().Length;

    ConditionPassed = (count > 1);

    return ConditionPassed;
}

然后我在 main 中调用它:

if (!CheckCondition2(SourceFolder))
{
    CanCopy = false;
    throw new Exception("More than one mark-off file.");
}

目前,当我测试它时,它告诉我目录中有多个文件,尽管只有一个。我的代码做错了什么?

4

6 回答 6

4

在您的方法中,true如果有多个文件,则返回。

但是,在您的 if 语句中,您检查false。你似乎把这些弄混了一点。

调试代码并在值更改时跟踪值以查看是否有任何逻辑错误总是一个好主意。当然,更自动化和更可靠的方法是编写单元测试。

你可以在你的方法中切换条件,成为

ConditionPassed = (count <= 1);

这样,这意味着true当您处于“正确”状态时该方法将返回。您可以改为将 if 语句更改为读取

if (CheckCondition2(SourceFolder))

要么可能对你有用。在后一个示例中,我还建议将方法的名称更改为类似的名称,HasMoreThanOneFile以使其功能非常明显。

于 2012-07-23T11:59:53.487 回答
0

请尝试调试您的代码。 在此处输入图像描述

它只是在 if 语句中进行了一些小改动后才起作用,它应该是if (CheckCondition2(SourceFolder))

尝试更新函数的名称以避免混淆。

于 2012-07-23T12:09:33.987 回答
0

尝试这个:

ConditionPassed = (count <= 1); //check should pass if there is at most one file
于 2012-07-23T12:02:02.583 回答
0

要么改变条件

ConditionPassed = (count <= 1);

或 if 语句

if (CheckCondition2(SourceFolder)))

我认为您的成功方案是源文件夹中最多有 1 个文件

于 2012-07-23T12:02:03.080 回答
0

而不是使用布尔,为什么不尝试......

System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(FolderName);
int count = dir.GetFiles().Length;

if (count > 1)
{
    throw new Exception("More than one mark-off file.");
}
else
{
    // Something else
}

它的代码更简洁(抱歉,强迫症开始了!)

于 2012-07-23T12:02:13.800 回答
0

我觉得你的逻辑有问题。ConditionPassed = (count > 1) 应该是 ConditionPassed = (count <=1)。希望这有帮助!

于 2012-07-23T12:02:59.287 回答