我刚看到这段代码
if ((fsi.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
{
//...
}
看起来有点奇怪。一种不同的测试方式??我希望很容易期待像
这样的东西if ((FirstName=="Richard") & (LastName == "DeFortune" )
{
//...
}
在两个测试中间使用&
由于
答案 0 :(得分:1)
这是按位运算符。
它检查fsi.Attributes
是否设置了FileAttributes.Directory
位。
答案 1 :(得分:1)
如果仔细观察,FileAttribute是枚举,属性标记为标记。
您将在此处获得更多信息:http://dotnetstep.blogspot.com/2009/01/flags-attribute-for-enum.html
现在单身'&'是按位运算符。
实施例
// Get file Info
System.IO.FileInfo info = new System.IO.FileInfo("C:\\TESTTT.txt");
// Get attribute and convert into int for better understanding
int val = (int)info.Attributes;
// In my case it is 33 whoes binary value for 8 bit 00100001.
// now we perform bitwise end with readonly FileAttributes.ReadOly is 1
// 00100001 & 00000001 = 00000001
int isReadOlny = val & (int)System.IO.FileAttributes.ReadOnly;
Console.WriteLine("IsReadOnly : " + isReadOlny.ToString());
// 00100001 & 00010000 = 00000000
int isDirectory = val & (int)System.IO.FileAttributes.Directory;
Console.WriteLine("IsDirectory : " + isDirectory.ToString());
Console.WriteLine(val);
Console.ReadLine();
希望这对你有所帮助。
答案 2 :(得分:0)
这里提到的&
是一个按位和 - 运算符而不是逻辑和(&&
)。