You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB中重载的Not运算符无法在C#中以!运算符使用的解决方法

解决C#中无法使用!运算符调用VB类Not重载的问题

问题原因

这是VB.NET和C#对运算符的映射规则差异导致的:

  • VB的Or运算符在.NET体系中被标记为按位/逻辑或,C#的|运算符正好对应这个映射关系,所以你能直接用|调用VB的Or重载,没有问题。
  • 但VB的Not运算符默认在.NET中被归类为按位取反,而C#的!是独立的逻辑非运算符。对于非布尔类型的自定义类(比如你的Filter<string>),C#编译器不会自动把VB的Not重载映射为!,只会将其识别为~(按位取反),这就是你收到编译错误的核心原因。

解决方案

根据你的需求,有两种实用的解决方式:

方案1:在C#中直接使用~运算符替代!

既然VB的Not在C#中对应的原生符号是~,直接替换即可满足需求:

Filter<string> myFilter = GetFilter();
Filter<string> negatedFilter = ~myFilter; // 等价于VB中的 Not myFilter

方案2:修改VB类,让C#识别!运算符

如果你一定要在C#中使用!符号,需要让VB类实现.NET的ILogicalNegationOperators接口,这个接口会明确标记逻辑非运算符的重载。具体步骤如下:

  1. 确保项目引用了System.Numerics程序集(.NET Core 3.0+/NET 5+默认包含,.NET Framework需要手动添加引用)。
  2. 修改VB的Filter类,实现ILogicalNegationOperators(Of Filter(Of T), Filter(Of T))接口:
Imports System.Numerics

Public Class Filter(Of T)
    Implements ILogicalNegationOperators(Of Filter(Of T), Filter(Of T))

    ' 保留原有的Not运算符重载
    Public Shared Operator Not(ByVal operand As Filter(Of T)) As Filter(Of T)
        ' 你的原有实现逻辑
        Return New Filter(Of T)()
    End Operator

    ' 显式实现接口,让C#识别为!运算符
    Public Shared Operator LogicalNegation(ByVal operand As Filter(Of T)) As Filter(Of T) Implements ILogicalNegationOperators(Of Filter(Of T), Filter(Of T)).LogicalNegation
        ' 复用已有的Not实现,避免重复代码
        Return Not operand
    End Operator
End Class

修改完成后,你就能在C#中直接使用!运算符了:

Filter<string> negatedFilter = !myFilter;

兼容.NET Framework的折中方案

如果你的项目基于不支持ILogicalNegationOperators接口的.NET Framework,可以在VB类中添加一个静态方法,供C#显式调用:

Public Class Filter(Of T)
    ' 原有的Not运算符重载
    Public Shared Operator Not(ByVal operand As Filter(Of T)) As Filter(Of T)
        ' 你的实现逻辑
        Return New Filter(Of T)()
    End Operator

    ' 供C#调用的静态方法
    Public Shared Function Negate(ByVal operand As Filter(Of T)) As Filter(Of T)
        Return Not operand
    End Function
End Class

在C#中调用:

Filter<string> negatedFilter = Filter<string>.Negate(myFilter);

内容的提问来源于stack exchange,提问作者Georg Plaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 06:43:37