我在一些非常古老的VB代码中遇到过这个问题:
If (Ans.FormatFlags And StringFormatFlags.NoClip) <> 0 Then
FF = FF And Not StringFormatFlags.NoClip
我不是百分之百确定这是做什么的,但我认为它会看到FF中的标志“未设置”吗?
如果是这样,那么等效的C#...
!StringFormatFlags.NoClip
无效,因为您无法申请!到StringFormatFlags。
!(int)StringFormatFlags.NoClip
无效,因为您无法申请!到一个int。
我在这里使用!= 0还是有更简单的在线方法?
答案 0 :(得分:3)
我相信这些是按位运算符。语句的含义是&#34;如果Ans.FormatFlags设置了StringFormatFlags.NoClip位,则清除FF&#34;中的StringFormatFlags.NoClip。所以你的陈述可以是这样的:
if ((Ans.FormatFlags & StringFormatFlags.NoClip) != 0)
FF = FF & (~(int)StringFormatFlags.NoClip);
或
if (Ans.FormatFlags.HasFlag(StringFormatFlags.NoClip))
FF &= (~(int)StringFormatFlags.NoClip);
(更新:感谢Enum&the;'的HasFlag和Maury for the mising type cast)
答案 1 :(得分:0)
简而言之,声明说,“如果设置了NoClip标志,则清除FF中的相关标志。”在C#中尝试:
if ((Ans.FormatFlags & StringFormatFlags.NoClip) != 0)
FF = FF & !StringFormatFlags.NoClip;