我正在使用一些旧代码,试图对其进行改进,但是遇到了以下问题,但我很难理解:
controlToUpdate.Font =
new System.Drawing.Font(someFont,
someFontSize,
controlToUpdate.Font.Style ^
(controlToUpdate.Font.Style & FontStyle.Bold));
具体来说,我对最后一个参数的作用感到困惑。据我了解,以下内容应进行按位比较,并返回结果:
controlToUpdate.Font.Style ^ (controlToUpdate.Font.Style & FontStyle.Bold)
..但是在这种情况下这意味着什么?可能的结果是什么,可以作为第三个参数传递给
new Font(...)
,如何在保持原始程序员意图的同时更清楚地重写此结果?旁注:使用Windows窗体时,这是一种正常的工作方式吗?我在该领域有些新知识-对于在该领域有经验的编码人员来说,这里的意图显而易见吗?
最佳答案
controlToUpdate.Font.Style & FontStyle.Bold
如果样式(
FontStyle.Bold
)包含粗体,则执行“和”以返回controlToUpdate.Font.Style
;如果样式不包含粗体,则执行0
:基本上,它仅获得“ bold”位。controlToUpdate.Font.Style ^ (controlToUpdate.Font.Style & FontStyle.Bold)
执行“异或”;如果设置了粗体位,则将其删除;如果未设置粗体位,则它将不执行任何操作(因为0的“ xor”表示无操作)。
因此,基本上,那个复杂的代码只是删除了“粗体”位(如果已设置)。一个更简单的实现是:
controlToUpdate.Font.Style & ~FontStyle.Bold
工作原理:
~FontStyle.Bold
将所有位取反; FontStyle.Bold
是1
:000....000001
所以
~FontStyle.Bold
是:111...1111110
然后,我们将其与当前样式“和”,这意味着它将保留除粗体位以外的所有旧样式。