运算符'!'不能应用于x类型的操作数

时间:2019-01-05 00:38:28

标签: c# .net vb.net bitwise-operators operands

所以我在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'的操作数。

任何帮助和对此的一些解释将不胜感激。

3 个答案:

答案 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类型

Compiler Error CS0023

  

运算符'operator'不能应用于类型'type'的操作数

     

试图将运算符应用于类型为   不适合与运营商合作。