Mo *_*tel 4 .net c# vb.net bitwise-operators operands
所以我在VB中有一些代码,我试图转换为C#.这段代码是由其他人编写的,我试图理解它,但有些困难.我有一些按位运算符和枚举比较,但不断抛出错误:
我不能说我之前使用了很多这些语法,并且对如何编写此代码感到困惑.我已经使用谷歌了解了它的更多信息,并且还使用了VB到C#在线转换器,希望得到一些基本的指导,但没有.下面的代码
VB - 这是有效的原始代码
Flags = Flags And Not MyEnum.Value ' Flags is of type int
Run Code Online (Sandbox Code Playgroud)
C# - 我转换的代码,它抛出一个错误
Flags = Flags & !MyEnum.Value; // Flags is of type int
Run Code Online (Sandbox Code Playgroud)
错误 - 每次返回的错误
接线员'!' 不能应用于MyEnum类型的操作数.
任何帮助和一些解释将非常感谢.
!只能在bool类型上操作.你似乎在操作一些位标志.在这种情况下,您应该使用按位NOT运算符~而不是逻辑NOT运算符!:
Flags = Flags & ~((int)MyEnum.Value); // you need to cast to int as well
Run Code Online (Sandbox Code Playgroud)
要获得最佳转换,首先要了解VB为您执行的隐式转换是有帮助的:
Flags = Flags And Not (CInt(MyEnum.Value))
Run Code Online (Sandbox Code Playgroud)
这相当于C#代码:
Flags = Flags & ~(int)MyEnum.Value;
Run Code Online (Sandbox Code Playgroud)
哪个可以缩短:
Flags &= ~(int)MyEnum.Value;
Run Code Online (Sandbox Code Playgroud)
在VB中,"Not"既是逻辑运算符又是按位运算符,具体取决于上下文,但在C#中,您有两个不同的运算符.
您可能会混淆逻辑和按位一元运算符
让我们访问帮助
一元运算符
+x 身份-x 否定!x 逻辑否定~x 按位取反++x预增量--x预减(T)x 将 x 显式转换为类型 T运算符“operator”不能应用于类型“type”的操作数
尝试将运算符应用于其类型不适用于该运算符的变量。