将一些 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 的错误类型转换)
我在一些非常古老的 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 的错误类型转换)