我已经看到围绕SO(here等)对&的一些解释(以及对|的许多解释),但是在以下情况下都没有一个澄清&的用法:

else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)  {...}


取自MSDN

任何人都可以对此用法进行解释吗?

谢谢。

最佳答案

e.AllowedEffect可能是按位标志的组合。 &运算符对每个位执行一点“和”逻辑运算。结果,如果被测位为1,则结果为该单个标志。
测试可能以这种方式扭曲,结果完全相同:

else if ((e.AllowedEffect & DragDropEffects.Move) != 0 )  {...}


让我们用一个例子更好地解释一下,标志值是:

None = 0,

    Copy = 1,

    Move = 2,

    Link = 4,


所以用二进制:

无= 00000000,

Copy = 00000001,

Move = 00000010,

Link = 00000100,


因此,我们考虑在这种情况下,我们具有“复制”和“移动”的组合,即,值将为:

00000011


通过按位移动,我们有:

00000011  -->Copy | Move
00000010  -->Move
======== &
00000010 === Move

关于c# - 在这种情况下使用按位与(&),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30616403/

10-16 09:51