仅当最后一个函数调用为false或者其中任何函数是否为false时,此代码是否返回false?

时间:2014-07-28 21:36:05

标签: c#

我遇到了这个遗留代码:

public static bool RemoveTempFiles()
{
    bool RetVal = true;

    RetVal &= RemoveFile(@"\", "*.csv");
    RetVal &= RemoveFile(@"\", "*.xml");
    RetVal &= RemoveFile(@"\", "*.txt");
    RetVal &= RemoveFile(@"\", "*.tmp");

    RetVal &= RemoveFile(GetDataPath(), "*.csv");
    RetVal &= RemoveFile(GetDataPath(), "*.xml");
    RetVal &= RemoveFile(GetDataPath(), "*.txt");
    RetVal &= RemoveFile(GetDataPath(), "*.tmp");

    return RetVal;
}

......而且我不熟悉"& ="操作

RemoveFile()删除所有提供扩展名的文件,除非遇到异常,否则返回true。

因为我不知道"& ="我不知道是否有任何失败导致RemoveTempFiles()返回false,或者如果最后一个(对于* .tmp文件)失败,它将只返回false(这是我期望代码首先工作的方式) ,但这没有任何意义)。

3 个答案:

答案 0 :(得分:6)

如果任何被调用函数返回false,则此代码将返回false。

每一行都像写作

retVal = retVal & RemoveFiles; // Or &&!

显然,如果RemoveFiles返回false,则返回false,然后在此之后将始终返回false。

有关详细信息,请参阅MSDN

答案 1 :(得分:3)

如果RemoveFile中只有一个返回false,则此代码返回false。

http://msdn.microsoft.com/en-us/library/e669ax02.aspx中所述,它与第一个变量(x)分配AND的结果与第二个变量(y)相同,所以它就像{{1} }}

答案 2 :(得分:2)

RetVal &= x只是RetVal = RetVal & x的简写。因此,只有当所有值都为真时结果才为真(如果其中任何值为假,则结果为假)

如果您使用RetVal |= x,那么如果任何值为true,则结果为true(如果所有值均为false,则结果为false)。