我遇到了这个遗留代码:
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(这是我期望代码首先工作的方式) ,但这没有任何意义)。
答案 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)。