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

为何运算符‘??’无法应用于A类与B类的实例?

为什么运算符‘??’无法应用于类型为‘A’和‘B’的操作数?

这是因为C#的**空合并运算符??**对操作数的类型有严格要求:两个操作数必须能隐式转换到同一个共同类型T——要么其中一个类型能隐式转成另一个的类型,要么两者都能隐式转成某个共享的父类型,且编译器能自动推断出这个T。

结合你的代码场景分析:

  • 当操作数是同类实例时(比如myA ?? myA),编译器直接把T推断为类A的类型,两个操作数自然都符合要求,所以编译正常;
  • 但A和B是完全独立的类,互相之间没有继承或隐式转换关系,编译器找不到一个能让两者都隐式转换过去的共同类型T。虽然它们都继承自object,但编译器不会自动把T推断为object(这是类型推断的规则限制,避免意外的类型提升),因此触发编译错误。

解决方法

只要让编译器能明确推断出共同类型即可,比如显式将其中一个操作数转换为object:

A myA = new A(); 
B myB = new B(); 

// 显式转换其中一个操作数到object,编译器就能推断出T为object
object? Fixed = myA ?? (object)myB; 

或者先把其中一个实例赋值给object类型的变量,再进行运算:

object? aAsObj = myA;
object? Fixed = aAsObj ?? myB;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:37:12