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

值类型运算符解析问题:自定义声明运算符与使用的运算符不相等

原因分析

两个运算符打印字符串完全一致,但实际属于不同类型的成员,因此相等性对比返回false,核心原因如下:

  • 你代码中定义的System.Int32是当前编译程序集内的自定义类型,和.NET运行时核心库内置的原生System.Int32是互相独立的两个类型。二者即使命名、命名空间、成员签名完全一致,因为所属程序集不同,对应的类型符号本身就不相等。
  • 表达式3 > 5中的操作数是int字面量,C#编译器语义分析阶段会优先将运算符绑定到原生System.Int32的>运算符实现,而非你自定义的同名类型的运算符。最终你拿到的usedSymbol是原生类型的运算符,declaredSymbol是自定义类型的运算符,二者自然不相等。
验证方法

如果希望两个符号相等,可以在创建编译对象时配置不引用默认核心运行库,此时编译器找不到原生System.Int32类型,就会将运算符绑定到你自定义的实现:

var compilation = CSharpCompilation.Create("bla", 
    options: new CSharpCompilationOptions(OutputKind.ConsoleApplication)
        .WithCoreAssemblyName(null)) // 禁用默认核心程序集绑定
    .AddSyntaxTrees(tree);

修改后运行代码就会得到两个运算符相等的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:09:02