将一些 VB bit fidding 转换为 c#

Convert some VB bit fidding to c#

我在一些非常古老的 VB 代码中遇到过这个:

If (Ans.FormatFlags And StringFormatFlags.NoClip) <> 0 Then
    FF = FF And Not StringFormatFlags.NoClip

我不是 100% 确定这是要做什么,但我认为它正在查看 FF 中的标志 "is not set"?

如果是,等效的 C# 是什么...

!StringFormatFlags.NoClip

无效,因为您无法申请!到 StringFormatFlags.

!(int)StringFormatFlags.NoClip

无效,因为您无法申请!到一个整数。

我在这里使用 != 0 还是有更简单的内联方法?

简而言之,声明说,"if the NoClip flag is set, then clear the related flag in FF." 在 C# 中尝试:

if ((Ans.FormatFlags & StringFormatFlags.NoClip) != 0)
   FF = FF & !StringFormatFlags.NoClip;

我相信这些是按位运算符。语句的意思是"if Ans.FormatFlags has the bit StringFormatFlags.NoClip set, clear StringFormatFlags.NoClip from FF"。所以你的语句可以是这样的:

if ((Ans.FormatFlags & StringFormatFlags.NoClip) != 0)
    FF = FF & (~(int)StringFormatFlags.NoClip);

if (Ans.FormatFlags.HasFlag(StringFormatFlags.NoClip))
    FF &= (~(int)StringFormatFlags.NoClip);

(更新:感谢 theB 的 Enum 的 HasFlag 和 Maury 的错误类型转换)