所以我在VB中有一些代码试图转换为C#。这段代码是由其他人编写的,我试图理解它,但是有些困难。我需要进行按位运算符和枚举比较,但会不断抛出错误:
我不能说我以前曾经使用过许多这样的语法,并且对如何编写此代码感到困惑。我曾经使用Google来了解更多有关它的知识,也曾使用VB到C#的在线转换器,希望获得一些基本指导,但一无所获。下面的代码
VB -这是有效的原始代码
Flags = Flags And Not MyEnum.Value ' Flags is of type int
C#-我转换的代码抛出错误
Flags = Flags & !MyEnum.Value; // Flags is of type int
错误-每次返回的错误
操作员'!'不能应用于类型为MyEnum'的操作数。
任何帮助和对此的一些解释将不胜感激。
答案 0 :(得分:7)
!
只能在bool
类型上运行。您似乎正在对某些标志进行操作。在这种情况下,您应该使用按位NOT运算符~
而不是逻辑NOT运算符!
:
Flags = Flags & ~((int)MyEnum.Value); // you need to cast to int as well
答案 1 :(得分:6)
要获得最佳转换,首先了解VB正在为您执行的隐式转换会有所帮助:
Kotlin
这等效于C#代码:
Flags = Flags And Not (CInt(MyEnum.Value))
可以缩短的时间:
Flags = Flags & ~(int)MyEnum.Value;
在VB中,“ Not”既是逻辑运算符又是按位运算符,具体取决于上下文,但是在C#中,您有两个不同的运算符。
答案 2 :(得分:4)
您可能会混淆逻辑和按位一元运算符
让我们访问帮助
Operators (C# Programming Guide)
一元运算符
+x
身份-x
否定!x
逻辑否定 ~x
按位求反 ++x
预增量--x
递减(T)x
明确将x转换为T类型运算符'operator'不能应用于类型'type'的操作数
试图将运算符应用于类型为 不适合与运营商合作。