在同一块中测试2个条件的不同方法是什么?

时间:2011-12-26 23:19:29

标签: c#-4.0

我刚看到这段代码

if ((fsi.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
{
  //...
}

看起来有点奇怪。一种不同的测试方式??我希望很容易期待像

这样的东西
if ((FirstName=="Richard") & (LastName == "DeFortune" )
{
  //...
}

在两个测试中间使用&

由于

3 个答案:

答案 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)

这里提到的&是一个按位和 - 运算符而不是逻辑和(&&)。