我正在使用一些旧代码,试图对其进行改进,但是遇到了以下问题,但我很难理解:

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.Bold1

000....000001


所以~FontStyle.Bold是:

111...1111110


然后,我们将其与当前样式“和”,这意味着它将保留除粗体位以外的所有旧样式。

09-25 17:04
查看更多