使用C#重载的VB.NET Not运算符

eng*_*ool 7 .net c# vb.net operator-overloading

我有一个VB类,它重载了Not运算符; 这似乎不适用于C#应用程序.

Public Shared Operator Not(item As MyClass) As Boolean
    Return False
End Operator
Run Code Online (Sandbox Code Playgroud)

我可以在VB.NET中使用它:

If Not MyClassInstance Then
    ' Do something
End If
Run Code Online (Sandbox Code Playgroud)

我试图在C#应用程序中使用它,但它不会构建.

if (!MyClassInstance) 
{ 
     // do something
}
Run Code Online (Sandbox Code Playgroud)

我收到了错误

接线员'!' 不能应用于'MyClass'类型的操作数

谁能告诉我我失踪了什么?

Han*_*ant 15

Not在VB.NET运算符是一个按位运算符,它产生其操作数的补数.它没有C#的!运算符,一个逻辑运算符.您必须在C#中使用等效的按位运算符来使用您的VB.NET运算符重载:

if(~MyClassInstance) 
{ 
     // do something
}
Run Code Online (Sandbox Code Playgroud)

您可以在VB.NET中编写一个映射到C#逻辑运算符的函数.这需要看起来像这样:

<System.Runtime.CompilerServices.SpecialName> _
Public Shared Function op_LogicalNot(item As MyClass) As Boolean
    Return False
End Function
Run Code Online (Sandbox Code Playgroud)