这段代码是否只在最后一个函数调用为false时返回false,或者其中任何一个函数调用为false时返回false ?

本文关键字:false 返回 函数调用 或者 任何一 段代码 是否 最后一个 代码 | 更新日期: 2023-09-27 18:15:23

我遇到了这个遗留代码:

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时返回false,或者其中任何一个函数调用为false时返回false ?

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

每一行就像写

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

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

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

如http://msdn.microsoft.com/en-us/library/e669ax02.aspx所述,它与将与的结果与第二个变量(y)赋值给第一个变量(x)相同,因此它就像x= (x&y)

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

如果您使用RetVal |= x,那么如果任何值为真,结果将为真(如果所有值都为假,结果将为假)。