【问题标题】:Using overloaded VB.NET Not operator from C#使用 C# 中的重载 VB.NET Not 运算符
【发布时间】:2014-12-12 18:49:32
【问题描述】:

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

Public Shared Operator Not(item As MyClass) As Boolean
    Return False
End Operator

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

If Not MyClassInstance Then
    ' Do something
End If

我正在尝试在 C# 应用程序中使用它,但它不会构建。

if (!MyClassInstance) 
{ 
     // do something
}

我得到了错误

运算符“!”不能应用于“MyClass”类型的操作数

谁能告诉我我错过了什么?

【问题讨论】:

  • 尝试使用参数大括号编写类名,因为您必须调用返回布尔值的函数。即if(!MyClassInstance()) { // do something }

标签: c# .net vb.net operator-overloading


【解决方案1】:

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

if(~MyClassInstance) 
{ 
     // do something
}

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

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

【讨论】:

  • 感谢您的解释,不幸的是,如果我使用 op_LogicalNot 我不能同时使用 VB Not 运算符,所以我可以让它在 VB 中很奇怪或在 C# 中很奇怪。我会坚持在 C# 中使用按位运算符。
  • 令人着迷的是,Visual Studio 抱怨同名的方法被声明了两次,但它确实构建并运行。干杯。
猜你喜欢
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多