将一些VB位fidding转换为c#

时间:2015-09-17 16:12:31

标签: c# vb.net bit-manipulation

我在一些非常古老的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还是有更简单的在线方法?

2 个答案:

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